home *** CD-ROM | disk | FTP | other *** search
/ Revista CD Expert 8 / Revista CD Expert nº 08 CD1.iso / Utilitarios / Programacao / MS-DOS Interrupt List / inter60c / INTERRUP.K < prev    next >
Text File  |  1999-01-03  |  357KB  |  9,501 lines

  1. Interrupt List, part 11 of 18
  2. Copyright (c) 1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999 Ralf Brown
  3. --------D-26---------------------------------
  4. INT 26 - DOS 1+ - ABSOLUTE DISK WRITE (except partitions > 32M)
  5.     AL = drive number (00h = A:, 01h = B:, etc)
  6.     CX = number of sectors to write (not FFFFh)
  7.     DX = starting logical sector number (0000h - highest sector on drive)
  8.     DS:BX -> data to write
  9. Return: CF clear if successful
  10.     CF set on error
  11.         AH = status (see #02547)
  12.         AL = error code (same as passed to INT 24 in DI)
  13.         AX = 0207h if more than 64K sectors on drive -- use new-style call
  14.     may destroy all other registers except segment registers
  15. Notes:    original flags are left on stack, and must be popped by caller
  16.     this call bypasses the DOS filesystem, though DOS 5+ invalidates any
  17.       disk buffers referencing sectors which are written with this call
  18.     examination of CPWIN386.CPL indicates that if this call fails with
  19.       error 0408h on an old-style (<32M) call, one should retry the
  20.       call with the high bit of the drive number in AL set
  21.     Novell DOS 7 decides whether the old-style or new-style (>32M) version
  22.       of INT 26 must be used solely on the basis of the partition's size,
  23.       thus forcing use of the new-style call even for data in the first
  24.       32M of the partition
  25.     Windows98 will display an error message and deliberately hang the
  26.       system on attempted write to any hard disk if neither bit 7 of the
  27.       Extended Drive Info byte nor bit 6 of "DOS_FLAG" (List-of-Lists+60h)
  28.       is set
  29. BUGS:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  30.       invalid drive number
  31.     DR DOS 3.41 will return with a jump instead of RETF, leaving the
  32.       wrong number of bytes on the stack; use the huge-partition version
  33.       (INT 26/CX=FFFFh) for all partition sizes under DR DOS 3.41
  34. SeeAlso: INT 13/AH=03h,INT 25,INT 26/CX=FFFFh,INT 21/AX=7305h
  35. --------D-26----CXFFFF-----------------------
  36. INT 26 - DOS 3.31+ - ABSOLUTE DISK WRITE (32M-2047M hard-disk partition)
  37.     CX = FFFFh
  38.     AL = drive number (0=A, 1=B, etc)
  39.     DS:BX -> disk write packet (see #02552)
  40. Return: CF clear if successful
  41.     CF set on error
  42.         AH = status (see #02547)
  43.         AL = error code (same as passed to INT 24 in DI)
  44.     may destroy all other registers except segment registers
  45. Notes:    partition is potentially >32M (and requires this form of the call) if
  46.       bit 1 of the device attribute word in the device driver is set
  47.     original flags are left on stack, and must be removed by caller
  48.     this call bypasses the DOS filesystem, though DOS 5+ invalidates any
  49.       disk buffers referencing sectors which are written with this call
  50.     for FAT32 drives (which may be up to 2TB in size), use INT 21/AX=7305h
  51.     Windows98 will display an error message and deliberately hang the
  52.       system on attempted write to any hard disk if neither bit 7 of the
  53.       Extended Drive Info byte nor bit 6 of "DOS_FLAG" (List-of-Lists+60h)
  54.       is set
  55. SeeAlso: INT 13/AH=03h,INT 25/CX=FFFFh,INT 26,INT 21/AX=7305h
  56.  
  57. Format of disk write packet:
  58. Offset    Size    Description    (Table 02552)
  59.  00h    DWORD    sector number
  60.  04h    WORD    number of sectors to read
  61.  06h    DWORD    transfer address
  62. SeeAlso: #02548
  63. --------G-26---------------------------------
  64. INT 26 - COMTROL HOSTESS i/ISA DEBUGGER - ENTER/EXIT EXTENDED ADDRESSING MODE
  65.     ???
  66. Return: ???
  67. SeeAlso: INT 23"COMTROL",INT 27"COMTROL"
  68. --------D-27---------------------------------
  69. INT 27 - DOS 1+ - TERMINATE AND STAY RESIDENT
  70.     DX = number of bytes to keep resident (max FFF0h)
  71.     CS = segment of PSP
  72. Return: never
  73. Notes:    this is an obsolete call
  74.     INT 22, INT 23, and INT 24 are restored from the PSP
  75.     does not close any open files
  76.     the minimum number of bytes which will remain resident is 110h for
  77.       DOS 2.x and 60h for DOS 3.0+; there is no minimum for DOS 1.x, which
  78.       implements this service in COMMAND.COM rather than the DOS kernel
  79. SeeAlso: INT 21/AH=31h
  80. --------G-27---------------------------------
  81. INT 27 - COMTROL HOSTESS i/ISA DEBUGGER - INVOKE REMOTE TURBO DEBUGGER KERNEL
  82.     ???
  83. Return: ???
  84. Desc:    invoke a copy of the remote Turbo Debugger kernel on the Hostess i
  85.       controller
  86. SeeAlso: INT 20"COMTROL",INT 26"COMTROL"
  87. --------D-28---------------------------------
  88. INT 28 C - DOS 2+ - DOS IDLE INTERRUPT
  89.     SS:SP = top of MS-DOS stack for I/O functions
  90. Return: all registers preserved
  91. Desc:    This interrupt is invoked each time one of the DOS character input
  92.       functions loops while waiting for input.  Since a DOS call is in
  93.       progress even though DOS is actually idle during such input waits,
  94.       hooking this function is necessary to allow a TSR to perform DOS
  95.       calls while the foreground program is waiting for user input.     The
  96.       INT 28h handler may invoke any INT 21h function except functions
  97.       00h through 0Ch.
  98. Notes:    under DOS 2.x, the critical error flag (the byte immediately after the
  99.       InDOS flag) must be set in order to call DOS functions 50h/51h from
  100.       the INT 28h handler without destroying the DOS stacks.
  101.     calls to INT 21/AH=3Fh,40h from within an INT 28 handler may not use a
  102.       handle which refers to CON
  103.     at the time of the call, the InDOS flag (see INT 21/AH=34h) is normally
  104.       set to 01h; if larger, DOS is truly busy and should not be reentered
  105.     the default handler is an IRET instruction
  106.     supported in OS/2 compatibility box
  107.     the _MS-DOS_Programmer's_Reference_ for DOS 5.0 incorrectly documents
  108.       this interrupt as superseded
  109.     the performance of NetWare Lite servers (and probably other peer-to-
  110.       peer networks) can be dramatically improved by calling INT 28
  111.       frequently from an application's idle loop
  112. SeeAlso: INT 21/AH=34h,INT 2A/AH=84h,INT 2F/AX=1680h
  113. --------U-289999-----------------------------
  114. INT 28 u - PCXDUMP v9.00+ - INSTALLATION CHECK
  115.     AX = 9999h
  116. Return: AX = AAAAh if installed
  117.         CX = version number * 100 (example: 03A2h = 930 = v9.30)
  118.         DL = interrupt used by the dump function (see #02553)
  119.         (00h if call not available)
  120.         BX = CS of PCXDUMP's INT 28 handler (undocumented)
  121.         ES = segment of PCXDUMP's memory block (v9.30, undocumented)
  122. Program: PCXDUMP is a shareware screen grabber saving in PCX format
  123. Notes:    if DL<>00h a dump can be requested by calling INT DL as shown
  124.       below (the user can choose the interrupt number at installation
  125.       time); if DL=00h the dump function can be called only by hotkeys
  126.       (this is the default)
  127.  
  128. (Table 02553)
  129. Call PCXDUMP screen-dump function with:
  130.     INT xx
  131.     AX = 1234h
  132.     BX = dump type
  133.         0000h Color dump
  134.         0001h Immediate color dump
  135.         0002h Black/White dump
  136.         0003h Immediate B/W dump
  137.         0004h Inverted B/W dump
  138.         0005h Gray scaled dump
  139.         0006h Inverted gray scaled dump
  140.         0007h Text screen dump to text file
  141.         0008h Text screen dump to ansi file
  142. Return: nothing
  143. Notes:    if BX=0001h, 0003h, 0007h or 0008h the whole screen will be
  144.       dumped; the other valid values will draw a selection frame
  145.       on the screen except in text modes (text modes allow only
  146.       full screen dumps)
  147.     this function doesn't perform the dump, it only requests it;
  148.       the dump will be performed after a few milliseconds if it's
  149.       safe to do so, thus the author recommends putting a 60 ms delay
  150.       after this call
  151. --------D-29---------------------------------
  152. INT 29 C - DOS 2+ - FAST CONSOLE OUTPUT
  153.     AL = character to display
  154. Return: nothing
  155.     BX may be destroyed by some versions of DOS 3.3
  156. Notes:    automatically called when writing to a device with bit 4 of its device
  157.       driver header set (see also INT 21/AH=52h)
  158.     COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
  159.       vector and assume that ANSI.SYS is installed if the segment is larger
  160.     the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
  161.     the default handler under DESQview 2.2 understands the <Esc>[2J
  162.       screen-clearing sequence, calls INT 10/AH=0Eh for all others
  163. SeeAlso: INT 21/AH=52h,INT 2F/AX=0802h,INT 79"AVATAR.SYS"
  164. --------U-29E60DCL0E-------------------------
  165. INT 29 - ShowGFX - INSTALLATION CHECK
  166.     AX = E60Dh
  167.     CL = 0Eh
  168.     DX = C0DEh
  169. Return: DX = DEC0h
  170. Program: ShowGFX is a PCBoard graphics driver by Solar Designer
  171. --------N-2A00-------------------------------
  172. INT 2A - NETWORK - INSTALLATION CHECK
  173.     AH = 00h
  174. Return: AH <> 00h if installed
  175.     CF set if NetWare v2.15 NetBIOS emulator installed
  176. Note:    supported by PC LAN Program, LAN Manager, LANtastic, NetWare, 10NET,
  177.       etc.
  178. SeeAlso: INT 5C"NetBIOS"
  179. --------N-2A0000-----------------------------
  180. INT 2A - AT&T Starlan Extended NetBIOS (var length names) - INSTALLATION CHECK
  181.     AX = 0000h
  182. Return: AH = DDh
  183. SeeAlso: INT 5B"Extended NetBIOS"
  184. --------N-2A01-------------------------------
  185. INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NETBIOS REQUEST,NO ERROR RETRY
  186.     AH = 01h
  187.     ES:BX -> NCB (see #03249 at INT 5C"NetBIOS")
  188. Return: AL = NetBIOS error code
  189.     AH = status
  190.         00h no error
  191.         01h error occurred
  192. SeeAlso: AH=04h,AX=0500h,INT 5B"Extended NetBIOS",INT 5C"NetBIOS"
  193. --------N-2A02-------------------------------
  194. INT 2A - NETWORK (Microsoft) - SET NET PRINTER MODE
  195.     AH = 02h
  196.     ???
  197. Return: ???
  198. --------N-2A0300-----------------------------
  199. INT 2A - NETWORK - CHECK DIRECT I/O
  200.     AX = 0300h
  201.     DS:SI -> ASCIZ device name (may be full path or only drive specifier--
  202.           must include the colon)
  203. Return: CF clear if direct physical addressing (INT 13,INT 25) permissible
  204.     CF set if access via files only
  205. Notes:    do not use direct disk accesses if this function returns CF set or the
  206.       device is redirected (INT 21/AX=5F02h)
  207.     use AH=00h to determine whether the network is installed; if not,
  208.       direct physical access is allowed
  209.     may take some time to execute, so programs which need to check
  210.       frequently should save the result of the first call
  211.     this function is called by the DOS kernel on INT 25 and INT 26
  212.     supported by PC LAN Program, LAN Manage, LANtastic, NetWare, 10NET,
  213.       etc.
  214. SeeAlso: INT 13/AH=02h,INT 13/AH=03h,INT 25,INT 26,INT 21/AX=5F02h
  215. --------N-2A04-------------------------------
  216. INT 2A - NETWORK - EXECUTE NetBIOS REQUEST
  217.     AH = 04h
  218.     AL = error retry
  219.         00h automatically retry request on errors 09h, 12h, and 21h
  220.           (see #03248 at INT 5C"NetBIOS")
  221.         01h no retry
  222.         02h ???
  223.     ES:BX -> Network Control Block (see #03249 at INT 5C"NetBIOS")
  224. Return: AX = 0000h if successful
  225.     AH = 01h on error
  226.         AL = error code
  227. Notes:    invokes either INT 5B or INT 5C as appropriate
  228.     supported by PC LAN Program, LANtastic, LAN Manager, NetWare, 10NET,
  229.       etc.
  230.     NetWare 2.15 NetBIOS emulator returns CF clear if successful, CF set
  231.       on error
  232.     PC LAN Program defines any non-zero return value in AH as an error
  233.       indicator for subfunction 00h, and any non-zero return value in AX
  234.       as an error indicator for subfunction 01h
  235. SeeAlso: AH=00h,AH=01h,AX=0500h,INT 5B"Extended NetBIOS",INT 5C"NetBIOS"
  236. --------N-2A0500-----------------------------
  237. INT 2A - NETWORK - GET NETWORK RESOURCE AVAILABILITY
  238.     AX = 0500h
  239. Return: AX reserved
  240.     BX = number of network names available
  241.     CX = number of network control blocks available
  242.     DX = number of network sessions available
  243. Notes:    supported by PC LAN Program, LAN Manager, LANtastic, NetWare, 10NET,
  244.       etc.
  245.     the application should call this function before using any network
  246.       resources, and maintain its own count to avoid exceeding the
  247.       network's resource limits
  248. SeeAlso: AH=00h,AH=01h,AH=04h,INT 5C"NetBIOS"
  249. --------N-2A06-------------------------------
  250. INT 2A - NETBIOS, LANtastic - NETWORK PRINT-STREAM CONTROL
  251.     AH = 06h
  252.     AL = function
  253.         01h set concatenation mode
  254.         all printer output put in one job until return to DOS prompt
  255.         02h set truncation mode (default)
  256.         printer open/close or BIOS/DOS output switch starts new job
  257.         03h flush printer output and start new print job
  258. Return: CF set on error
  259.         AX = error code
  260.     CF clear if successful
  261. Notes:    subfunction 03h is equivalent to Ctrl/Alt/keypad-*
  262.     supported by PC LAN Program, LANtastic, NetWare, 10NET, etc.
  263.     LANtastic v4.x no longer supports this call
  264.     this function sets the printer mode for all redirected printers
  265. SeeAlso: INT 21/AX=5D08h,INT 21/AX=5D09h,INT 2F/AX=1125h
  266. --------N-2A07-------------------------------
  267. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  268.     AH = 07h
  269.     ???
  270. Return: ???
  271. Program: PC Network is an early networking package which was renamed the
  272.       IBM PC Local Area Network Program (PC LAN Program) as of v1.10
  273. SeeAlso: AH=86h
  274. --------N-2A2001-----------------------------
  275. INT 2A - MS Networks or NETBIOS - ???
  276.     AX = 2001h
  277.     ???
  278. Return: ???
  279. Note:    intercepted by DESQview 2.x
  280. --------N-2A2002-----------------------------
  281. INT 2A - NETWORK - ???
  282.     AX = 2002h
  283.     ???
  284. Return: ???
  285. Note:    called by MS-DOS 3.30-6.00 APPEND
  286. --------N-2A2003-----------------------------
  287. INT 2A - NETWORK - ???
  288.     AX = 2003h
  289.     ???
  290. Return: ???
  291. Note:    called by MS-DOS 3.30-6.00 APPEND
  292. --------N-2A4147DX0000-----------------------
  293. INT 2A U - NetSoft DOS-NET v1.20+ - INSTALLATION CHECK
  294.     AX = 4147h ('AG')
  295.     DX = 0000h
  296. Return: DX = 4147h if installed
  297.         DS:SI -> configuration data (see #02554)
  298. Program: DOS-NET is a shareware networking package by Albert Graham
  299. Note:    this call is supported by CLIENT.COM, SERVER.COM, ROUTER.COM, and
  300.       NETDOS.COM
  301. SeeAlso: INT 65/DX=4147h,INT 65/DX=4741h
  302.  
  303. Format of DOS-NET v1.20 configuration data area:
  304. Offset    Size    Description    (Table 02554)
  305.  00h    BYTE    ???
  306.  01h    BYTE    interrupt number used by DOS-NET APIs
  307.  02h    WORD    function number to place in AX for above interrupt
  308.  04h    BYTE    minor version as two BCD digits (e.g. 20h for v1.20)
  309.  05h    BYTE    major version number (01h for v1.20)
  310.  06h  2 BYTEs    ???
  311.  08h    WORD    ??? (used by ARCNET.COM)
  312.         bit 15: ??? (set by MACTEST.COM)
  313.  0Ah    WORD    ??? (used by NDIS.COM and ODI.COM)
  314.  0Ch 22 BYTEs    ???
  315.  24h    DWORD    -> ??? function (set by PROTECT.COM)
  316.  28h 12 BYTEs    ???
  317.  34h    DWORD    -> ??? function (set by FASTVIEW.COM)
  318.  38h    DWORD    -> ??? function (set by FASTVIEW.COM)
  319.  58h    DWORD    -> ??? (offsets 04h and 1Ah from value are used by NETFILES)
  320.     ???
  321.  7Ch    WORD    ???
  322.  7Eh    WORD    ??? (may be high half of a DWORD at 7Ch)
  323.     ???
  324.  A8h    DWORD    -> ??? (used by SM.COM)
  325.     ???
  326. 114h    WORD    ???
  327. 116h    WORD    ??? (may be high half of a DWORD at 114h)
  328.     ???
  329. 1BDh    BYTE    ??? flags
  330.         bit 0: ???
  331.         bit 6: ???
  332.     ???
  333. 1E1h    BYTE    ???
  334.     ???
  335. 208h    WORD    ??? (used by SM.COM, MACTEST)
  336. 282h    WORD    ???
  337. 284h  2 BYTEs    ???
  338. 286h    WORD    ??? flags
  339.         bit 0: ???
  340.     ???
  341. 31Eh    WORD    ???
  342. 320h    WORD    ??? (used by NDIS.COM and ODI.COM)
  343. 322h  8 BYTEs    ???
  344. 32Ah    WORD    ??? (used by NDIS.COM and ODI.COM)
  345.     ???
  346. 33Eh  4 BYTEs    ??? (used by ODI.COM)
  347. 342h  N BYTEs    ??? (used by NDIS.COM)
  348.     ???
  349. 3CFh    BYTE    ??? flags
  350.         bit 2: ???
  351. 3D2h    BYTE    installed-component flags
  352.         bit 0: PROTECT installed
  353.         bit 1: NETCACHE installed
  354.         bit 3: SM.COM installed
  355.         bit 7: NETDEBUG installed
  356. 3D3h    BYTE    installed-component flags
  357.         bit 0: NETFILES installed
  358.         bit 6: FASTVIEW installed
  359.     ???
  360. 3FFh    BYTE    ??? (used by NDIS.COM)
  361. 400h    BYTE    ???
  362. 401h    BYTE    ??? (used by SM.COM)
  363. 402h    BYTE    ??? (used by SM.COM)
  364.     ???
  365. 448h    BYTE    ???
  366. 449h    BYTE    ??? (used by MACTEST)
  367. 44Ah    BYTE    ??? (used by PROTECT)
  368. 44Bh    BYTE    ???
  369. 44Ch    BYTE    ???
  370. 44Dh    BYTE    ??? (used by SM.COM)
  371. 44Eh    BYTE    ??? (used by SM.COM, MACTEST)
  372.     ???
  373. --------N-2A7802-----------------------------
  374. INT 2A - NETWORK - PC LAN PROG v1.31+ - GET LOGGED ON USER NAME
  375.     AX = 7802h
  376.     ES:DI -> 8-byte buffer to be filled
  377. Return: AL = 00h if no user logged on to Extended Services
  378.     AL <> 00h if user logged on to Extended Services
  379.         buffer at ES:DI filled with name, padded to 8 chars with blanks.
  380. --------D-2A80-------------------------------
  381. INT 2A CU - NETWORK - BEGIN DOS CRITICAL SECTION
  382.     AH = 80h
  383.     AL = critical section number (00h-0Fh) (see #02555)
  384. Notes:    normally hooked to avoid interrupting a critical section, rather than
  385.       called
  386.     the handler should ensure that none of the critical sections are
  387.       reentered, usually by suspending a task which attempts to reenter
  388.       an active critical section
  389.     the DOS kernel does not invoke critical sections 01h and 02h unless it
  390.       is patched.  DOS 3.1+ contains a zero-terminated list of words
  391.       beginning at offset -11 from the Swappable Data Area
  392.       (see #01687 at INT 21/AX=5D06h); each word contains the offset within
  393.       the DOS data segment of a byte which must be changed from C3h (RET)
  394.       to 50h (PUSH AX) under DOS 3.x or from 00h to a nonzero value under
  395.       DOS 4.0+ to enable use of critical sections.    For DOS 4.0+, all
  396.       words in this list point at the byte at offset 0D0Ch.
  397.     MS Windows patches the DOS kernel's calls to INT 2A/AH=80h-81h into
  398.       far calls to its own handler, and does not reflect the calls back
  399.       to INT 2A unless SYSTEM.INI contains ReflectDOSInt2A=1 or
  400.       ModifyDOSInt2A=0 in the [386Enh] section
  401.     Novell NETX does not issue INT 2A/AH=80h and INT 2A/AH=81h calls when
  402.       it intercepts INT 21 calls and processes them itself
  403. SeeAlso: AH=81h,AH=82h,AX=8700h,INT 21/AX=5D06h,INT 21/AX=5D0Bh
  404.  
  405. (Table 02555)
  406. Values for DOS critical section number:
  407.  01h    DOS kernel, SHARE.EXE, DOSMGR
  408.     apparently for maintaining the integrity of DOS/SHARE/NET
  409.       data structures
  410.  02h    DOS kernel, DOSMGR
  411.     ensures that no multitasking occurs while DOS is calling an
  412.       installable device driver
  413.  05h    network redirector
  414.  06h    DOS 4.x only IFSFUNC
  415.  08h    ASSIGN.COM
  416.  0Ah    MSCDEX, CORELCDX
  417.  0Fh    IBM PC LAN server (while intercepting INT 10/AH=06h,07h,0Eh)
  418. --------D-2A81-------------------------------
  419. INT 2A CU - NETWORK - END DOS CRITICAL SECTION
  420.     AH = 81h
  421.     AL = critical section number (00h-0Fh) (see #02555)
  422. Notes:    normally hooked rather than called
  423.     the handler should reawaken any tasks which were suspended due to an
  424.       attempt to enter the specified critical section
  425.     MS Windows patches the DOS kernel's calls to INT 2A/AH=80h-81h into
  426.       far calls to its own handler, and does not reflect the calls back
  427.       to INT 2A unless SYSTEM.INI contains ReflectDOSInt2A=1 or
  428.       ModifyDOSInt2A=0 in the [386Enh] section
  429. SeeAlso: AH=80h,AH=82h,AX=8700h
  430. --------D-2A82-------------------------------
  431. INT 2A CU - NETWORK - END DOS CRITICAL SECTIONS 0 THROUGH 7
  432.     AH = 82h
  433. Notes:    called by the INT 21h function dispatcher for function 0 and functions
  434.       greater than 0Ch except 59h, and on process termination
  435.     the handler should reawaken any tasks which were suspended due to an
  436.       attempt to enter one of the critical sections 0 through 7
  437. SeeAlso: AH=81h
  438. --------N-2A84-------------------------------
  439. INT 2A CU - NETWORK - KEYBOARD BUSY LOOP
  440.     AH = 84h
  441. Note:    similar to DOS's INT 28h, called from inside the DOS keyboard input
  442.       loop (i.e. INT 21/AH=07h or INT 21/AH=08h) to allow the network
  443.       software to process requests
  444. SeeAlso: INT 28
  445. --------N-2A86-------------------------------
  446. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  447.     AH = 86h
  448.     ???
  449. Return: ???
  450. SeeAlso: AH=07h,AH=C4h
  451. --------P-2A8700-----------------------------
  452. INT 2A CU - PRINT - BEGIN BACKGROUND PRINTING
  453.     AX = 8700h
  454.     CF clear
  455. Return: CF clear if OK to print in background now
  456.     CF set if background printing not allowed at this time
  457. Desc:    used to inform interested programs that PRINT is about to start its
  458.       background processing, and allow those programs to postpone the
  459.       processing if necessary
  460. Notes:    when PRINT gains control and wants to begin printing, it calls this
  461.       function.  If CF is clear on return, PRINT begins its background
  462.       processing, and calls AX=8701h when it is done.  If CF is set on
  463.       return, PRINT will relinquish control immediately, and will not
  464.       call AX=8701h
  465.     PCVENUS (an early network shell by IBM and CMU) hooks this call to
  466.       prevent background printing while its own code is active
  467. SeeAlso: AH=80h,AH=81h,AX=8701h
  468. --------P-2A8701-----------------------------
  469. INT 2A CU - PRINT - END BACKGROUND PRINTING
  470.     AX = 8701h
  471. Desc:    used to inform interested programs that PRINT has completed its
  472.       background processing
  473. Note:    called by PRINT after it has performed some background printing; not
  474.       called if AX=8700h returned with CF set.
  475. SeeAlso: AX=8700h
  476. --------N-2A89-------------------------------
  477. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  478.     AH = 89h
  479.     AL = ???  (ASSIGN uses 08h)
  480.     ???
  481. Return: ???
  482. --------I-2A90-------------------------------
  483. INT 2A U - IBM PC 3270 EMULATION PROGRAM - ???
  484.     AH = 90h
  485.     ???
  486. Return: ???
  487. Note:    the LANtastic redirector and SERVER.EXE use this function with AL=01h,
  488.       03h-07h,0Ch-11h
  489. --------N-2AC2-------------------------------
  490. INT 2A U - Network - ???
  491.     AH = C2h
  492.     AL = subfunction
  493.         07h ???
  494.         08h ???
  495.     BX = 0001h
  496.     ???
  497. Return: ???
  498. Note:    this function is called by the DOS 3.30-6.00 APPEND
  499. --------N-2AC4-------------------------------
  500. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  501.     AH = C4h
  502.     AL = subfunction
  503.         07h ???
  504.         08h ???
  505.     BX = ???
  506.     ???
  507. Return: ???
  508. SeeAlso: AH=86h
  509. --------N-2AD800-----------------------------
  510. INT 2A U - Novell NetWare Lite - SERVER - SET ???
  511.     AX = D800h
  512. Return: nothing
  513. Desc:    sets ??? flag, and sets ??? to initial value
  514. Note:    called by CLIENT
  515. SeeAlso: AX=D801h,AX=D850h
  516. --------N-2AD801-----------------------------
  517. INT 2A U - Novell NetWare Lite - SERVER - RESET ???
  518.     AX = D801h
  519. Return: nothing
  520. Desc:    clears the ??? flag set by AX=D800h
  521. Note:    called by CLIENT
  522. SeeAlso: AX=D800h,AX=D850h
  523. --------N-2AD850-----------------------------
  524. INT 2A U - Novell NetWare Lite - CLIENT - INCREMENT ???
  525.     AX = D850h
  526. Return: nothing
  527. Desc:    increments an internal byte-sized counter
  528. Note:    this function is intercepted by DV/X 1.10 PEERSERV.DVR and the
  529.       Advanced NetWare 4.0 DOS Requester
  530. SeeAlso: AX=D851h
  531. --------N-2AD851-----------------------------
  532. INT 2A U - Novell NetWare Lite - CLIENT - RESET ???
  533.     AX = D851h
  534. Return: nothing
  535. Desc:    resets an internal byte-sized counter to zero
  536. Note:    this function is intercepted by DV/X 1.10 PEERSERV.DVR and the
  537.       Advanced NetWare 4.0 DOS Requester
  538. SeeAlso: AX=D850h
  539. --------N-2AD852-----------------------------
  540. INT 2A U - Novell NetWare - DOS Requester v1.03 - ???
  541.     AX = D852h
  542. Return: ???
  543. Note:    calls the NetWare Lite SERVER installation check, and sets ??? pointer
  544. SeeAlso: AX=D853h,INT 2F/AX=D880h
  545. --------N-2AD853-----------------------------
  546. INT 2A U - Novell NetWare - DOS Requester v1.03 - ???
  547.     AX = D853h
  548. Return: ???
  549. Note:    clears the pointer set by AX=D852h
  550. SeeAlso: AX=D852h
  551. --------N-2AE0-------------------------------
  552. INT 2A U - PC Network 1.00 - ???
  553.     AH = E0h
  554.     AL = subfunction??? (01h,02h, maybe others)
  555.     ???
  556. Return: ???
  557. Note:    called by PCNet 1.00 NET.COM, a shell program from which others are run
  558. --------N-2AFF90-----------------------------
  559. INT 2A - PC/TCP PREDIR.EXE - ???
  560.     AX = FF90h
  561. Return: AX = ???
  562. Note:    PREDIR.EXE is the network printer redirector included as part of the
  563.       PC/TCP system by FTP Software, Inc.
  564. --------N-2AFF91-----------------------------
  565. INT 2A - PC/TCP PREDIR.EXE - ???
  566.     AX = FF91h
  567.     BX = ???
  568. Return: AX = status???
  569. --------N-2AFF92-----------------------------
  570. INT 2A - PC/TCP PREDIR.EXE - INSTALLATION CHECK
  571.     AX = FF92h
  572. Return: AX = 0000h if installed
  573.        BX = redirected printer port (FFFFh if no printers redirected)
  574.        CX = version (CH = major, CL = minor)
  575. Note:    PREDIR.EXE is the network printer redirector included as part of the
  576.       PC/TCP system by FTP Software, Inc.
  577. --------N-2AFF93-----------------------------
  578. INT 2A - PC/TCP PREDIR.EXE - ???
  579.     AX = FF93h
  580. Return: AX = ???
  581. --------N-2AFF94-----------------------------
  582. INT 2A - PC/TCP PREDIR.EXE - ???
  583.     AX = FF94h
  584.     BX = ???
  585.     CX = ???
  586.     DX = ???
  587. Return: AX = ???
  588. Note:    PREDIR.EXE is the network printer redirector included as part of the
  589.       PC/TCP system by FTP Software, Inc.
  590. --------N-2AFF95-----------------------------
  591. INT 2A - PC/TCP PREDIR.EXE - GET CONFIGURATION STRINGS
  592.     AX = FF95h
  593.     CX = what to get
  594.         0000h ??? (returned pointer to "C:\COMMAND.COM")
  595.         0001h spooling program
  596.         0002h ???
  597.         0003h spool file name
  598.         0004h swap file name
  599. Return: AX = status
  600.         0000h successful
  601.     BX:DX -> ASCIZ configuration string
  602. --------N-2AFF96-----------------------------
  603. INT 2A - PC/TCP PREDIR.EXE - SET PRINT JOB TERMINATION CONFIGURATION
  604.     AX = FF96h
  605.     CX = what to set
  606.         0000h ???
  607.         0001h print-on-hotkey state
  608.         0002h print-on-exit state
  609.         0003h print job timeout in clock ticks
  610.         0004h print-on-EOF state
  611.     BX = new value (0000h disabled, 0001h enabled except for timeout)
  612. Return: AX = ???
  613. SeeAlso: AX=FF97h
  614. Note:    PREDIR.EXE is the network printer redirector included as part of the
  615.       PC/TCP system by FTP Software, Inc.
  616. --------N-2AFF97-----------------------------
  617. INT 2A - PC/TCP PREDIR.EXE - GET PRINT JOB TERMINATION CONFIGURATION
  618.     AX = FF97h
  619.     CX = what to get
  620.         0000h ???
  621.         0001h print-on-hotkey state
  622.         0002h print-on-exit state
  623.         0003h print job timeout in clock ticks
  624.         0004h print-on-EOF state
  625. Return: AX = status
  626.         0000h successful
  627.     BX = old value (0000h disabled, 0001 enabled except for timeout)
  628. SeeAlso: AX=FF96h
  629. --------D-2B---------------------------------
  630. INT 2B - DOS 2+ - RESERVED
  631. Note:    this vector is not used in MS-DOS versions <= 6.22, and points at an
  632.       IRET instruction
  633. --------D-2B---------------------------------
  634. INT 2B - IBM ROM-DOS v4.0 - ???
  635.     AH = function
  636.         00h ??? (modifies data in IBMBIO.COM)
  637.         01h internal operations
  638.         02h ???
  639.         AL = index (00h-0Ch)
  640.         Return: AX = ??? or (CMOS 2Dh and CMOS 2Eh)
  641.         03h get ??? data
  642.         Return: AX = (CMOS 2Dh and CMOS 2Eh)
  643.             BX = FFFFh
  644.         other does nothing
  645. Note:    function 03h is called by ROMSHELL.COM; if BX != 0, then the ES:DI from
  646.       INT 2F/AX=1982h points at valid data
  647. SeeAlso: INT 2F/AX=1982h
  648. --------D-2C---------------------------------
  649. INT 2C - DOS 2+ - RESERVED
  650. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  651. --------O-2C---------------------------------
  652. INT 2C - STARLITE architecture - KERNEL API
  653. Note:    STARLITE is an architecture by General Software for a series of MS-DOS
  654.       compatible operating systems (OEM DOS, NETWORK DOS, and SMP DOS) to
  655.       be released in 1991.    The interrupt number is subject to change
  656.       before the actual release.
  657. --------m-2C---------------------------------
  658. INT 2C R - Cloaking - CALL PROTECTED-MODE PASSALONG CHAIN
  659. Notes:    when this interrupt is invoked in V86 mode, RM386 will invoke the first
  660.       in a chain of protected-mode handlers, and will only pass execution
  661.       to the V86-mode INT 2C handler if none of the handlers in the
  662.       passalong chain handle the call instead.  This is the method by which
  663.       the real-mode stub of a cloaked application communicates with the
  664.       protected-mode portion.
  665.     the cloaking host calls the passalong chain with EAX=58494E33h ('WIN3')
  666.       when MS Windows starts up and with EAX=334E4958h ('3NIW') when
  667.       Windows shuts down; between these two broadcasts, the additional
  668.       Windows-only Cloaking services are available
  669.     this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  670.       memory manager included in Helix Software's Netroom
  671. SeeAlso: INT 2C/AX=0009h,INT 2F/AX=4310h"Cloaking"
  672. --------m-2C0000-----------------------------
  673. INT 2C P - Cloaking - ALLOCATE GDT SELECTOR
  674.     AX = 0000h
  675.     EBX = base address
  676.     CL = access mode byte
  677.     CH = extended access mode byte (omit limit field)
  678.     EDX = segment limit
  679. Return: CF clear if successful
  680.         AX = selector
  681.     CF set on error
  682.         AX = error code (see #02556)
  683. Notes:    this INT 2C interface is used by Netroom's DPMI.EXE v3.00
  684.     to access extended memory, set the base address to the desired
  685.       physical address plus 400000h (4M)
  686.     this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  687.       memory manager included in Helix Software's Netroom
  688. SeeAlso: AX=0001h,AX=0002h,AX=0003h,AX=0004h,AX=0005h,INT 31/AH=57h,#00501
  689.  
  690. (Table 02556)
  691. Values for Cloaking error code:
  692.  0001h    no more selectors
  693.  0002h    not a GDT ring 0 selector
  694.  0003h    invalid selector (out of range, not user selector)
  695.  0004h    selector not allocated
  696. --------m-2C0001-----------------------------
  697. INT 2C P - Cloaking - FREE GDT SELECTOR
  698.     AX = 0001h
  699.     SI = selector
  700. Return: CF clear if successful
  701.     CF set on error
  702.         AX = error code (see #02556)
  703. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  704. SeeAlso: AX=0000h,INT 2F/AX=4310h"Cloaking"
  705. --------m-2C0002-----------------------------
  706. INT 2C P - Cloaking - SET SEGMENT BASE ADDRESS
  707.     AX = 0002h
  708.     SI = selector
  709.     EBX = new physical base addres
  710. Return: CF clear if successful
  711.     CF set on error
  712.         AX = error code (see #02556)
  713. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  714. SeeAlso: AX=0000h,AX=0003h,AX=0004h,INT 31/AX=0007h,#00501
  715. --------m-2C0003-----------------------------
  716. INT 2C P - Cloaking - SET SEGMENT LIMIT
  717.     AX = 0003h
  718.     SI = selector
  719.     EBX = new limit
  720. Return: CF clear if successful
  721.     CF set on error
  722.         AX = error code (see #02556)
  723. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  724. SeeAlso: AX=0000h,AX=0002h,AX=0004h,INT 31/AX=0008h
  725. --------m-2C0004-----------------------------
  726. INT 2C P - Cloaking - SET SEGMENT ACCESS MODE
  727.     AX = 0004h
  728.     SI = selector
  729.     CL = new access mode byte (see #00502)
  730. Return: CF clear if successful
  731.     CF set on error
  732.         AX = error code (see #02556)
  733. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  734. SeeAlso: AX=0000h,AX=0002h,AX=0003h,AX=0005h,INT 31/AX=0009h
  735. --------m-2C0005-----------------------------
  736. INT 2C P - Cloaking - SET SEGMENT EXTENDED ACCESS MODE
  737.     AX = 0005h
  738.     SI = selector
  739.     CL = new extended access mode byte (limit field ignored) (see #02557)
  740. Return: CF clear if successful
  741.     CF set on error
  742.         AX = error code (see #02556)
  743. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  744. SeeAlso: AX=0000h,AX=0002h,AX=0003h,AX=0004h,INT 31/AX=0009h
  745.  
  746. Bitfields for extended access mode byte:
  747. Bit(s)    Description    (Table 02557)
  748.  7    4K granularity instead of byte granularity
  749.  6    32-bit code segment
  750.  5    reserved (0)
  751.  4    segment available to system
  752. SeeAlso: #00505
  753. --------m-2C0006-----------------------------
  754. INT 2C P - Cloaking - GET PROTECTED-MODE INTERRUPT VECTOR
  755.     AX = 0006h
  756.     CL = vector (00h-7Fh)
  757. Return: CF clear
  758.     DX:EBX -> current interrupt handler
  759. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  760. SeeAlso: AX=0007h,INT 31/AX=0204h
  761. --------m-2C0007-----------------------------
  762. INT 2C P - Cloaking - SET PROTECTED-MODE INTERRUPT VECTOR
  763.     AX = 0007h
  764.     CL = vector (00h-7Fh)
  765.     DX:EBX -> interrupt handler
  766. Return: CF clear
  767. Notes:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  768.     the IDT entry's type remains unchanged
  769. SeeAlso: AX=0006h,INT 31/AX=0205h
  770. --------m-2C0008-----------------------------
  771. INT 2C P - Cloaking - GET PASSALONG ADDRESS
  772.     AX = 0008h
  773. Return: CF clear
  774.     DX:EBX = current passalong address
  775. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  776. SeeAlso: AX=0009h,AX=002Ch,INT 2F/AX=4310h"Cloaking"
  777. --------m-2C0009-----------------------------
  778. INT 2C P - Cloaking - SET PASSALONG ADDRESS
  779.     AX = 0009h
  780.     DX:EBX = new value for passalong address (see #02558)
  781. Return: CF clear
  782. Notes:    when an INT 2C instruction is executed in V86 mode, the Cloaking host
  783.       calls the passalong address.    The handler should check whether the
  784.       upcall is of interest to it, and if not it should jump to the old
  785.       passalong address (retrieved with AX=0008h before the handler was
  786.       installed).  The final handler should return with CF clear to cause
  787.       the interrupt to be reflected back to V86 mode if none of the
  788.       passalong handlers is triggered
  789.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  790. SeeAlso: AX=0008h,AX=002Dh,INT 2C"PASSALONG CHAIN"
  791.  
  792. (Table 02558)
  793. Values Cloaking passalong address is called with:
  794.     EAX = CS:IP of byte following INT 2C instruction invoking passalong
  795.     SS:EBX -> caller registers (see #02559)
  796.     CF clear
  797.     others undefined
  798. Return: CF clear: pass along to V86-mode INT 2C handler
  799.     CF set: return immediately to V86 mode
  800.  
  801. Format of Cloaking caller registers:
  802. Offset    Size    Description    (Table 02559)
  803.  00h    DWORD    EDI
  804.  04h    DWORD    ESI
  805.  08h    DWORD    EBP
  806.  0Ch    DWORD    reserved (ESP from PUSHAD instruction)
  807.  10h    DWORD    EBX
  808.  14h    DWORD    EDX
  809.  18h    DWORD    ECX
  810.  1Ch    DWORD    EAX
  811.  20h    DWORD    error code
  812.  24h    DWORD    EIP
  813.  28h    WORD    CS
  814.  2Ah    WORD    padding
  815.  2Ch    DWORD    EFLAGS
  816.  30h    DWORD    ESP
  817.  34h    WORD    SS
  818.  36h    WORD    padding
  819. --remainder not available if protected-mode ring3 trap---
  820.  38h    WORD    ES
  821.  3Ah    WORD    padding
  822.  3Ch    WORD    DS
  823.  3Eh    WORD    padding
  824.  40h    WORD    FS
  825.  42h    WORD    padding
  826.  44h    WORD    GS
  827.  46h    WORD    padding
  828. --------m-2C000A-----------------------------
  829. INT 2C P - Cloaking - GET BASE ADDRESS OF GDT SELECTOR
  830.     AX = 000Ah
  831.     SI = selector
  832. Return: CF clear if successful
  833.         EBX = segment base address
  834.     CF set on error
  835.         AX = error code (see #02556)
  836. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  837.       memory manager included in Helix Software's Netroom
  838. SeeAlso: AX=0000h,AX=0002h,AX=000Bh
  839. --------m-2C000B-----------------------------
  840. INT 2C P - Cloaking - GET SELECTOR LIMIT
  841.     AX = 000Bh
  842.     SI = selector
  843. Return: CF clear if successful
  844.         EBX = segment base address
  845.     CF set on error
  846.         AX = error code (see #02556)
  847. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  848. SeeAlso: AX=000Ah,INT 2F/AX=4310h"Cloaking"
  849. --------m-2C---------------------------------
  850. INT 2C P - RM386 v6.00 - CLOAKING - RESERVED FOR CLOAKED BIOS USE UNDER WINDOWS
  851.     AX = function (000Ch-001Fh)
  852. --------m-2C000F-----------------------------
  853. INT 2C P - Cloaking v1.01 - "Simulate_Shell_Event"
  854.     AX = 000Fh
  855.     ECX = event code (see #02560)
  856.     DX = subfunction for event
  857.     EDX high word = boost value (see #02561)
  858.     SI:EDI -> completion procedure
  859. Return: CF clear if successful (event scheduled)
  860.     CF set on error
  861. Note:    this function is only available while MS Windows is running
  862. SeeAlso: AX=0011h,AX=0012h,INT 2F/AX=1605h,INT 2F/AX=4310h"Cloaking"
  863.  
  864. (Table 02560)
  865. Values for Cloaking shell event code:
  866.  0414h    Hot key event
  867.     subevent 0000h: Alt-Space
  868.     subevent 0001h: Alt-Enter
  869.     subevent 0002h: Dir-VM
  870.  0415h    Switch context
  871.     subevent 0000h for DOS VM context, nonzero for System VM context
  872.  0416h    Clipboard event
  873.  0417h    Termination event
  874.     subevent 0000h for normal termination, nonzero for error
  875.  0418h    Display message
  876.     subevent 0000h for normal message, nonzero for system model ASAP
  877.  0419h    Crash
  878.  041Ah    Paste complete
  879.     subevent 0000h: normal
  880.     subevent 0001h: cancelled by user
  881.     subevent 0002h: cancelled
  882.  041Bh    Contention event
  883.  041Ch    Screen switch
  884.     subevent 0000h: forward
  885.     subevent 0001h: back
  886.  041Dh    Filesystem change
  887.  041Eh    Check Focus
  888.  041Fh    Panic
  889.  
  890. Bitfields for boost value:
  891. Bit(s)    Description    (Table 02561)
  892.  0    boost system VM until focus changes
  893.  1    boost system VM on Switcher screen
  894.  2    boost system VM until response
  895.  3    boost system VM during clipboard activity
  896.  4    boost system VM during print screen
  897.  5    boost system VM during update
  898. --------m-2C0011-----------------------------
  899. INT 2C P - Cloaking v1.01 - "Switch_VMs_and_Call_back"
  900.     AX = 0011h
  901.     EBX = handle of VM to be made active
  902.     SI:EDI -> 32-bit FAR completion procedure
  903. Return: CF clear if successful (scheduled)
  904.     CF set on error
  905. Notes:    this function is only available while MS Windows is running
  906.     the completion procedure is called with CF clear if the specified
  907.       VM has been made active, or with CF set on error
  908. SeeAlso: AX=000Fh,AX=0012h
  909. --------m-2C0012-----------------------------
  910. INT 2C P - Cloaking v1.01 - "Query_Current_VM"
  911.     AX = 0012h
  912. Return: CF clear
  913.     EBX = handle of active VM
  914.     ESI = handle of system VM
  915.     ECX = VM status flags (see #02562)
  916.     EDX = shell flags (see #02563)
  917. Note:    this function is only available while MS Windows is running in enhanced
  918.       mode
  919. SeeAlso: AX=000Fh,AX=0011h,AX=0013h
  920.  
  921. Bitfields for VM status flags:
  922. Bit(s)    Description    (Table 02562)
  923.  0    in exclusive mode
  924.  1    runs in background
  925.  2    being created
  926.  3    suspended
  927.  4    not executable
  928.  5    executing in protected mode
  929.  6    contains PM application
  930.  7    32-bit PM application
  931.  8    called from VxD
  932.  9    high priority background
  933.  10    blocked on semaphore
  934.  11    awakening
  935.  12    has pageable V86
  936.  13    has locked V86
  937.  14    is scheduled
  938.  15    idle
  939.  16    closing
  940.  
  941. Bitfields for shell flags:
  942. Bit(s)    Description    (Table 02563)
  943.  2    windowed
  944.  5    Alt-Tab reserved
  945.  6    Alt-Esc reserved
  946.  7    Alt-Space reserved
  947.  8    Alt-PrtSc reserved
  948.  9    Alt-Enter reserved
  949.  10    Alt-PrtSc reserved
  950.  11    PrtSc reserved
  951.  12    polling enabled
  952.  13    no HMA
  953.  14    has shortcut key
  954.  15    locked EMS handles
  955.  16    locked XMS handles
  956.  17    fast paste enabled
  957.  18    locked V86 memory
  958.  30    close-on-exit enabled
  959. --------m-2C0013-----------------------------
  960. INT 2C P - Cloaking v1.01 - "Issue_System_Modal_Message"
  961.     AX = 0013h
  962.     EDX = message box flags (see #02564)
  963.     DS:ECX -> ASCIZ message text
  964.     DS:EDI -> ASCIZ caption
  965. Return: CF clear
  966.     EAX = response code
  967. Note:    this function is only available while MS Windows is running in enhanced
  968.       mode
  969. SeeAlso: AX=000Fh,AX=0012h
  970.  
  971. Bitfields for message box flags:
  972. Bit(s)    Description    (Table 02564)
  973.  3-0    response codes (see #02565)
  974.  7-4    icon codes
  975.     1 = Warning hand
  976.     2 = exclamation mark
  977.     4 = asterisk
  978.  9-8    default response (0 = first button, 1 = second, 2 = third)
  979.  12    message is system model
  980.  15    don't change focus
  981.  29    hang with interrupts enabled
  982.  30    do not window
  983.  31    execute ASAP
  984.  
  985. (Table 02565)
  986. Values for response codes:
  987.  00h    OK
  988.  01h    OK, Cancel
  989.  02h    Abort, Retry, Ignore
  990.  03h    Yes, No, Cancel
  991.  04h    Yes, No
  992.  05h    Retry, Cancel
  993. --------m-2C001D-----------------------------
  994. INT 2C P - Cloaking v1.01 - GET INT 2C API HANDLER ENTRY POINT
  995.     AX = 001Dh
  996. Return: CF clear
  997.     DX:EBX = selector:offset of Cloaking host INT 2C handler
  998. Desc:    get the Cloaking host's entry point to bypass any other programs
  999.       which may have hooked INT 2C in protected mode
  1000. Note:    the returned entry point must be called with a simulated INT, i.e.
  1001.       a PUSHD must precede the far call to the handler
  1002. SeeAlso: INT 2F/AX=4310h"Cloaking"
  1003. --------m-2C001E-----------------------------
  1004. INT 2C P - Cloaking v1.01 - CLEAR CRITICAL SECTION
  1005.     AX = 001Eh
  1006. Return: CF clear
  1007. Desc:    allow MS Windows to switch to another VM after having prevented it
  1008.       by invoking a critical section
  1009. SeeAlso: AX=001Fh,INT 15/AX=101Ch,INT 2F/AX=1682h
  1010. --------m-2C001F-----------------------------
  1011. INT 2C P - Cloaking v1.01 - SET CRITICAL SECTION
  1012.     AX = 001Fh
  1013. Return: CF clear
  1014. Desc:    prevent MS Windows from switching to another VM
  1015. SeeAlso: AX=001Eh,INT 15/AX=101Bh,INT 2F/AX=1681h
  1016. --------m-2C0020-----------------------------
  1017. INT 2C P - Cloaking - GET SIZE OF PROTECTED-MODE STATE
  1018.     AX = 0020h
  1019. Return: EAX = number of bytes required for storing state
  1020. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1021. SeeAlso: AX=0021h,AX=0022h
  1022. --------m-2C0021-----------------------------
  1023. INT 2C P - Cloaking - SAVE PROTECTED-MODE STATE
  1024.     AX = 0021h
  1025.     ES:EDI -> buffer for protected-mode state
  1026. Return: CF clear
  1027.     buffer filled
  1028. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1029. SeeAlso: AX=0020h,AX=0022h
  1030. --------m-2C0022-----------------------------
  1031. INT 2C P - Cloaking - RESTORE PROTECTED-MODE STATE
  1032.     AX = 0022h
  1033.     DS:ESI -> buffer containing previously-saved protected-mode state
  1034. Return: CF clear if successful
  1035.         state restored
  1036.     CF set on error (invalid buffer contents)
  1037. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1038. SeeAlso: AX=0020h,AX=0021h
  1039. --------m-2C0023-----------------------------
  1040. INT 2C P - Cloaking - ISSUE PROTECTED-MODE XMS CALL
  1041.     AX = 0023h
  1042. Notes:    not currently implemented--NOP in RM386 v6.00
  1043.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1044. --------m-2C0024-----------------------------
  1045. INT 2C P - Cloaking - SET V86-MODE STACK
  1046.     AX = 0024h
  1047.     DX:EBX = new value for V86-mode SS:ESP
  1048. Return: nothing
  1049. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1050. --------m-2C0025-----------------------------
  1051. INT 2C P - Cloaking - CALL V86-MODE PROCEDURE
  1052.     AX = 0025h
  1053.     DS:EBX -> client register structure (see #02559)
  1054. Return: CF clear if successful
  1055.         client register structure updated
  1056.     CF set if no more nested procedure call space available
  1057. Notes:    this call uses the V86-mode stack supplied in the client structure, and
  1058.       calls the routine specified by CS:IP in the client structure
  1059.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1060. SeeAlso: AX=0026h,AX=0027h,INT 31/AX=0301h
  1061. --------m-2C0026-----------------------------
  1062. INT 2C P - Cloaking - CALL V86-MODE INTERRUPT HANDLER
  1063.     AX = 0026h
  1064.     DS:EBX -> client register structure (see #02559)
  1065.     CX = interrupt number
  1066. Return: CF clear if successful
  1067.         client register structure updated
  1068.     CF set if no more nested procedure call space available
  1069. Notes:    this call uses the V86-mode stack supplied in the client structure
  1070.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1071. SeeAlso: AX=0025h,AX=0027h,INT 31/AX=0300h
  1072. --------m-2C0027-----------------------------
  1073. INT 2C P - Cloaking - CHAIN TO V86-MODE INTERRUPT HANDLER
  1074.     AX = 0027h
  1075.     DS:EBX -> client register structure (see #02559)
  1076. Return: CF clear if successful
  1077.         client register structure updated
  1078.     CF set if no more nested procedure call space available
  1079. Notes:    this call uses the V86-mode stack supplied in the client structure,
  1080.       and jumps to the address specified by CS:IP in the client structure
  1081.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1082. SeeAlso: AX=0025h,AX=0026h
  1083. --------m-2C0028-----------------------------
  1084. INT 2C P - Cloaking - GET ESP0 FROM TSS
  1085.     AX = 0028h
  1086. Return: CF clear
  1087.     EAX = TSS's ESP0
  1088. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  1089.       memory manager included in Helix Software's Netroom
  1090. --------m-2C0029-----------------------------
  1091. INT 2C P - Cloaking - SET SECONDARY STACK
  1092.     AX = 0029h
  1093.     DX:EBX = new value for SS:ESP of ring 3 secondary stack
  1094. Return: CF clear
  1095. Desc:    inform RM386 of the ring 3 interrupt stack location
  1096. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1097. --------m-2C002A-----------------------------
  1098. INT 2C P - Cloaking - SET 8259 IRQ BASE VECTORS
  1099.     AX = 002Ah
  1100.     BL = base vector of master interrupt controller
  1101.     CL = base vector of slave interrupt controller
  1102. Notes:    this call merely informs RM386 that the caller has changed the
  1103.       interrupt mappings
  1104.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1105. SeeAlso: INT 67/AX=DE0Bh
  1106. --------m-2C002BCH81-------------------------
  1107. INT 2C P - Cloaking - PROTECTED-MODE VIRTUAL DMA SERVICES
  1108.     AX = 002Bh
  1109.     CH = 81h
  1110.     CL = subfunction (02h-0Ch)
  1111.     other registers as appropriate for subfunction
  1112. Return: varies by function
  1113.     CF set on error
  1114. Notes:    these functions are equivalent to the INT 4B/AX=81xxh subfunctions
  1115.       with the same numbers
  1116.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1117. SeeAlso: INT 4B/AX=8102h,INT 4B/AX=810Ch
  1118. --------m-2C002C-----------------------------
  1119. INT 2C P - Cloaking - GET PORT-TRAPPING PASSALONG
  1120.     AX = 002Ch
  1121. Return: CF clear
  1122.     DX:EBX = current I/O trapping passalong address
  1123. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1124. SeeAlso: AX=0008h,AX=002Dh
  1125. --------m-2C002D-----------------------------
  1126. INT 2C P - Cloaking - SET PORT-TRAPPING PASSALONG
  1127.     AX = 002Dh
  1128.     DX:EBX = new I/O trapping passalong address (see #02566)
  1129. Return: CF clear
  1130. Notes:    RM386 calls the passalong address whenever an access to a monitored
  1131.       I/O port is attempted; the handler should check whether it is a port
  1132.       that it is interested in, and if not call the previous passalong
  1133.       address (which was retrieved with AX=002Ch before installing the
  1134.       new handler)
  1135.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1136. SeeAlso: AX=0009h,AX=002Ch,INT 67/AX=5DEAh
  1137.  
  1138. (Table 02566)
  1139. Values Cloaking port-trapping passalong address is called with:
  1140.     EAX = CS:IP of faulting instruction (unless executing in protected-mode
  1141.         ring 3)
  1142.     SS:EBX -> caller register structure (see #02559)
  1143.         check EFLAGS V86-mode bit for type
  1144.     CX = first two bytes of I/O instruction which was trapped
  1145.     DX = port to which I/O is being performed
  1146.     CF clear
  1147. Return: CF clear if RM386 should perform I/O operation
  1148.     CF set if I/O should be skipped
  1149. Note:    RM386 skips the trapped I/O instruction, so the passalong handler
  1150.       should not modify the client CS:EIP
  1151. --------m-2C002E-----------------------------
  1152. INT 2C P - Cloaking - TRAP I/O PORT
  1153.     AX = 002Eh
  1154.     DX = port number to trap
  1155. Return: CF clear if successful
  1156.     CF set on error (port out of range or reserved)
  1157. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1158. SeeAlso: AX=002Fh,AX=0030h
  1159. --------m-2C002F-----------------------------
  1160. INT 2C PU - Cloaking - UNTRAP I/O PORT
  1161.     AX = 002Fh
  1162.     DX = port number for which to cancel trapping
  1163. Return: CF clear if successful
  1164.     CF set on error (port out of range or reserved)
  1165. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1166. SeeAlso: AX=002Eh,AX=0030h
  1167. --------m-2C0030-----------------------------
  1168. INT 2C PU - Cloaking - GET TRAPPING STATE OF SPECIFIED PORT
  1169.     AX = 0030h
  1170.     DX = port number
  1171. Return: CF clear if successful
  1172.        BX = current state (0000h not trapped, 0001h trapped)
  1173.     CF set on error (port out of range or reserved)
  1174. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1175. SeeAlso: AX=002Eh,AX=002Fh
  1176. --------m-2C0031-----------------------------
  1177. INT 2C PU - RM386 v6.00 - BUG
  1178.     AX = 0031h
  1179. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix
  1180.       Software's Netroom
  1181. Note:    due to a fencepost error, RM386 v6.00 will branch unpredictably if
  1182.       invoked with this function
  1183. --------m-2C0031-----------------------------
  1184. INT 2C P - Cloaking v1.01 - ALLOCATE V86 CALLBACK
  1185.     AX = 0031h
  1186.     DX:EBX = CS:EIP of protected-mode routine to be invoked by callback
  1187. Return: CF clear if successful
  1188.         EBX = CS:IP of V86-mode callback handler
  1189.     CF set on error
  1190. SeeAlso: AX=0032h
  1191. --------m-2C0032-----------------------------
  1192. INT 2C P - Cloaking v1.01 - FREE V86 CALLBACK
  1193.     AX = 0032h
  1194.     EBX = CS:IP of V86-mode callback handler
  1195. Return: CF clear if successful
  1196.     CF set on error
  1197.         AX = error code
  1198.         0005h invalid callback address
  1199.         0006h callback already free
  1200. SeeAlso: AX=0032h
  1201. --------m-2C0033-----------------------------
  1202. INT 2C P - Cloaking v1.01 - REGISTER CLOAKING CLIENT
  1203.     AX = 0033h
  1204.     DS:EDX -> client registration structure (see #02567)
  1205. Return: CF clear if successful
  1206.     CF set on error (linked list corrupt)
  1207. SeeAlso: AX=0034h,#02778 at INT 2F/AX=4310h"Cloaking"
  1208.  
  1209. Format of client registration structure:
  1210. Offset    Size    Description    (Table 02567)
  1211.  00h    PWORD    link to next structure
  1212.  06h    PWORD    link to previous structure
  1213.  0Ch  2 BYTEs    client version (major, minor)
  1214.  0Eh 20 BYTEs    client name
  1215.  22h    DWORD    physical address of client start
  1216.  26h    DWORD    client's total size in bytes
  1217. Note:    the link area should not be modified once the structure has been
  1218.       used for the registration call
  1219. --------m-2C0034-----------------------------
  1220. INT 2C P - Cloaking v1.01 - UNREGISTER CLOAKING CLIENT
  1221.     AX = 0034h
  1222.     DS:EDX -> client registration structure (see #02567)
  1223. Return: CF clear if successful
  1224.     CF set on error (linked list corrupt)
  1225. Note:    the client must unregister before freeing the XMS block containing
  1226.       its registration structure(s)
  1227. SeeAlso: AX=0033h,#02778 at INT 2F/AX=4310h"Cloaking"
  1228. --------D-2D---------------------------------
  1229. INT 2D - DOS 2+ - RESERVED
  1230. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  1231. BUG:    RM386 v6.00-6.02 (as distributed with Helix's Netroom v3.x) contains
  1232.       a stack bug in its protected-mode INT 2D handler which causes a crash
  1233.       when INT 2D is invoked from V86 mode
  1234. --------t-2D---------------------------------
  1235. INT 2D - ALTERNATE MULTIPLEX INTERRUPT SPECIFICATION (AMIS) [v3.6]
  1236.     AH = multiplex number
  1237.     AL = function
  1238.         00h installation check
  1239.         01h get private entry point
  1240.         02h uninstall
  1241.         03h request popup
  1242.         04h determine chained interrupts
  1243.         05h get hotkey list
  1244.         06h get device-driver information
  1245.         07h-0Fh reserved for future enhancements
  1246.         Return: AL = 00h (not implemented)
  1247.         other  application-dependent
  1248.     other registers vary by function (also see individual entries below)
  1249. Return: varies by function
  1250. Notes:    programs should not use fixed multiplex numbers; rather, a program
  1251.       should scan all multiplex numbers from 00h to FFh, remembering the
  1252.       first unused multiplex in case the program is not yet installed.
  1253.       For multiplex numbers which are in use, the program should compare
  1254.       the first 16 bytes of the signature string to determine whether it
  1255.       is already installed on that multiplex number.  If not previously
  1256.       installed, it should use the first free multiplex number.
  1257.     functions other than 00h are not valid unless a program is installed
  1258.       on the selected multiplex number
  1259.     to be considered fully compliant with version 3.6 of the specification,
  1260.       programs must implement at least functions 00h, 02h (no resident
  1261.       uninstall code required), and 04h (return value 04h).     TSRs that
  1262.       provide hotkeys with which the user can activate them must also
  1263.       implement function 05h.  TSRs which provide DOS device drivers must
  1264.       also implement function 06h.    The absolute minimum fully-compliant
  1265.       implementation has an overhead of 64 bytes (80 bytes with function
  1266.       05h) plus 22 bytes per hooked interrupt (for the interrupt sharing
  1267.       protocol header and hook list entry).
  1268.     the signature string and description may be used by memory mappers
  1269.       to display the installed programs
  1270.     to be considered fully compliant, users of this specification must
  1271.       adhere to the IBM interrupt sharing protocol (see #02568), which will
  1272.       permit removal of TSRs in arbitrary order and interrupt handler
  1273.       reordering.  All TSRs following this specification should be
  1274.       removable unless they are loaded from CONFIG.SYS, though they need
  1275.       not keep the code for removing themselves resident; it is acceptable
  1276.       for a separate program to perform the interrupt unhooking and
  1277.       memory-freeing steps of removal.
  1278.     A sample public-domain implementation including example TSRs and
  1279.       utility programs may be found in a separate package distributed as
  1280.       AMISLnnn.ZIP (AMISL092.ZIP as of this writing).
  1281.     Please let me know if you choose to follow this proposal.  The
  1282.       signature and a list of the private API calls you use would be
  1283.       appreciated, as well.
  1284. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h
  1285. SeeAlso: INT 2D/AL=05h,INT 2D/AL=06h,INT 2F"NOTES"
  1286.  
  1287. Format of interrupt sharing protocol interrupt handler entry point:
  1288. Offset    Size    Description    (Table 02568)
  1289.  00h  2 BYTEs    short jump to actual start of interrupt handler, immediately
  1290.           following this data block (EBh 10h)
  1291.  02h    DWORD    address of next handler in chain
  1292.  06h    WORD    signature 424Bh
  1293.  08h    BYTE    EOI flag
  1294.         00h software interrupt or secondary hardware interrupt handler
  1295.         80h primary hardware interrupt handler (will issue EOI)
  1296.  09h  2 BYTEs    short jump to hardware reset routine
  1297.         must point at a valid FAR procedure (may be just RETF)
  1298.  0Bh  7 BYTEs    reserved (0) by IBM for future expansion
  1299. Note:    when chaining to the prior handler, the interrupt handler must perform
  1300.       an indirect jump/call using the address at offset 02h in the
  1301.       ISP header.  This permits another AMIS TSR to hook itself into
  1302.       the chain at a position other than as the first handler to receive
  1303.       an interrupt.
  1304. SeeAlso: INT F1/AH=01h"Common ISDN API",INT F1/AH=06h"CAPI",#04068
  1305. --------t-2D--00-----------------------------
  1306. INT 2D - AMIS v3.0+ - INSTALLATION CHECK
  1307.     AL = 00h
  1308.     AH = multiplex number for program
  1309. Return: AL = 00h if free
  1310.     AL = FFh if multiplex number in use
  1311.         CX = binary version number (CH = major, CL = minor)
  1312.         DX:DI -> signature string (see #02569) identifying the program
  1313.           using the multiplex number
  1314. SeeAlso: INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h,INT 2D/AL=05h
  1315. SeeAlso: INT 2D/AL=06h
  1316. Index:    installation check;Alternate Multiplex Interrupt Specification
  1317. Index:    installation check;AMIS|installation check;FASTMOUS
  1318. Index:    installation check;SPELLER|installation check;Monitor
  1319. Index:    installation check;NOLPT|installation check;NOTE
  1320. Index:    installation check;RBkeyswp|installation check;SWITCHAR
  1321. Index:    installation check;VGABLANK|installation check;EATMEM
  1322. Index:    installation check;RECALL|installation check;XPTR2
  1323.  
  1324. Format of AMIS signature string:
  1325. Offset    Size    Description    (Table 02569)
  1326.  00h  8 BYTEs    blank-padded manufacturer's name (possibly abbreviated)
  1327.  08h  8 BYTEs    blank-padded product name
  1328.  10h 64 BYTEs    ASCIZ product description (optional, may be a single 00h)
  1329. Note:    it is not necessary to reserve a full 64 bytes for the description,
  1330.       just enough to store the actual ASCIZ string
  1331. SeeAlso: #02570
  1332.  
  1333. (Table 02570)
  1334. Values for AMIS signatures known to be in use:
  1335.  'Byrial J' 'EKLAVO  '    permits keyboard entry of Esperanto accented letters
  1336.  'CoveSoft' 'Burnout+'    shareware screen saver Burnout Plus
  1337.  'Crynwr  ' 'SPELLER '    TSR spelling-checker
  1338.  'CPH1995 ' 'CDTSR   '    resident CD-Audio player
  1339.  'CPH1996 ' 'DSAPI   '
  1340.  'CSJewell' 'Modula3L'    Curtis Jewell's Modula-3 compiler (non-TSR)
  1341.  'DAISYCHA' 'INDRIVER'    Advanced Parallel Port daisy chain driver (vendor name
  1342.               in product description field, if desired)
  1343.             (see also INT 2D/AL=DCh)
  1344.  'DTown SD' 'DTU     '    DTown Software Development's DTown Utilities
  1345.             (see also INT 2D/AL=20h)
  1346.  'ECLIPSE ' 'PLUMP   '    Eclipse Software's printer and plotter spooler
  1347.  'GraySoft' 'GIPC    '    GraySoft's Inter-Process Communications driver
  1348.  'heathh  ' 'Monitor '
  1349.  'Helge O '        TSRs by Helge Olav Helgesen
  1350.  'J. Berry' 'RATSR   '    RemoteAccess Network Manager workstation module
  1351.  'JWB      ' 'RAMLIGHT'    James Birdsall's on-screen RAMdisk activity indicator
  1352.  'M Better' 'iHPFS   '    Marcus Better's HPFS filesystem driver for DOS
  1353.  'M. Paul ' 'FREEVER '    DOS version-faking TSR by Matthias Paul
  1354.  'Nildram ' 'ST         '    Screen Thief graphics screen grabber
  1355.  'Pino Nav' 'ALTMENU '    activate any program's menu bar by pressing Alt key
  1356.  'Pino Nav' 'Keybit  '    Pino Navato's KEYBIT Lite Italian keyboard driver v4+
  1357.  'PowrQuot' 'CAPRILOG'
  1358.  'PowrQuot' 'CAPRITSR'
  1359.  'PowrQuot' 'CAPRIWIN'
  1360.  'R-Ware  ' 'dLite   '    run-time data decompression TSR
  1361.  'Ralf B  ' 'disaXXYY'    RBdisabl -- disable key scancode XX w/ shift states YY
  1362.  'Ralf B  ' 'DUALVGA '    dual-VGA support, screen blanker, and DPMS driver
  1363.  'Ralf B  ' 'FASTMOUS'    example TSR included with sample AMIS library code
  1364.  'Ralf B  ' 'NoBreak '    disable Ctrl-@, Ctrl-C, and Ctrl-Break keys
  1365.  'Ralf B  ' 'NOLPT n '    example TSR -- turn LPTn into bit-bucket
  1366.  'Ralf B  ' 'NOTE    '    example TSR -- popup note-taker
  1367.  'Ralf B  ' 'RBclock '    RBclock -- on-screen real-time clock
  1368.  'Ralf B  ' 'RBclockE'    RBclock -- on-screen elapsed-time clock
  1369.  'Ralf B  ' 'RBdvorak'    Dvorak keyboard mapping w/ opt Esc/~, LCtrl/CapsLk swap
  1370.  'Ralf B  ' 'RBkcount'    display count of keystrokes on screen
  1371.  'Ralf B  ' 'RBkeyswp'    RBkeyswap v3.0+ -- swap Esc/~ and LCtrl/CapsLock keys
  1372.  'Ralf B  ' 'RBnoboot'    disable Ctrl-Alt-Del key combination
  1373.  'Ralf B  ' 'ShftCaps'    require Shift-CapsLock to turn on CapsLock
  1374.  'Ralf B  ' 'ShftNumL'    require Shift-NumLock to turn off NumLock
  1375.  'Ralf B  ' 'SWITCHAR'    example TSR -- add switchar() support removed from DOS5
  1376.  'Ralf B  ' 'VGABLANK'    VGA-only screen blanker
  1377.  'Ralf B  ' 'WINTAME '    yield CPU when program in Win95 DOS box is idle
  1378.  'Sally IS' 'Mdisk   '    removeable, resizeable RAMdisk
  1379.  'Sally IS' 'Scr2Tex '    screen dumper with output in (La)Tex format
  1380.  'SRT      ' 'STOPBOOT'    reboot preventer by Steve Talbot
  1381.  'Thaco      ' 'NEST    '    Eirik Pedersen's programmer's delimiter matcher
  1382.  'TifaWARE' 'EATMEM  '    George A. Theall's public domain memory restrictor for
  1383.             testing programs (v1.1+)
  1384.  'TifaWARE' 'RECALL  '    public domain commandline editor and history (v1.2+)
  1385.  'Todd      ' 'XPTR2   '    PC-to-Transputer interface by Todd Radel
  1386.  'WlkngOwl' 'NoiseSYS'    NOISE.SYS random-number generator
  1387. SeeAlso: #02569
  1388. --------t-2D--01-----------------------------
  1389. INT 2D - AMIS v3.0+ - GET PRIVATE ENTRY POINT
  1390.     AL = 01h
  1391.     AH = multiplex number for program
  1392. Return: AL = 00h if all API calls via INT 2D
  1393.     AL = FFh if entry point supported
  1394.         DX:BX -> entry point for bypassing interrupt chain
  1395. Note:    this function is not valid unless a program is installed on the
  1396.       specified multiplex number; use INT 2D/AL=00h to check
  1397. SeeAlso: INT 2D/AL=00h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h,INT 2D/AL=05h
  1398. SeeAlso: INT 2D/AL=06h
  1399. Index:    entry point;Alternate Multiplex Interrupt|entry point;AMIS
  1400. --------t-2D--02-----------------------------
  1401. INT 2D - AMIS v3.0+ - UNINSTALL
  1402.     AL = 02h
  1403.     AH = multiplex number for program
  1404.     DX:BX = return address for successful uninstall (may be    ignored by TSR)
  1405. Return: AL = status
  1406.         00h not implemented (makes TSR non-compliant with specification)
  1407.         01h unsuccessful
  1408.         02h can not uninstall yet, will do so when able
  1409.         03h safe to remove, but no resident uninstaller
  1410.           (TSR still enabled)
  1411.         BX = segment of memory block with resident code
  1412.         04h safe to remove, but no resident uninstaller
  1413.           (TSR now disabled)
  1414.         BX = segment of memory block with resident code
  1415.         05h not safe to remove now, try again later
  1416.         06h disabled, but can not be removed from memory
  1417.           because loaded from CONFIG.SYS
  1418.         07h safe to remove, but no resident device-driver
  1419.           uninstaller.    Caller must unlink device
  1420.           drivers from DOS device chain as well as
  1421.           unhooking interrupts and freeing memory
  1422.         BX = segment of memory block with resident code
  1423.         FFh successful
  1424.     return at DX:BX with AX destroyed if successful and TSR honors
  1425.       specific return address
  1426. Note:    this function is not valid unless a program is installed on the
  1427.       specified multiplex number; use INT 2D/AL=00h to check
  1428. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=03h,INT 2D/AL=04h,INT 2D/AL=05h
  1429. SeeAlso: INT 2D/AL=06h
  1430. Index:    uninstall;Alternate Multiplex Interrupt Specification|uninstall;AMIS
  1431. --------t-2D--03-----------------------------
  1432. INT 2D - AMIS v3.0+ - REQUEST POP-UP
  1433.     AL = 03h
  1434.     AH = multiplex number for program
  1435. Return: AL = status
  1436.         00h not implemented or TSR is not a pop-up
  1437.         01h can not pop up at this time, try again later
  1438.         02h can not pop up yet, will do so when able
  1439.         03h already popped up
  1440.         04h unable to pop up, user intervention required
  1441.         BX = standard reason code
  1442.             0000h unknown failure
  1443.             0001h interrupt chain passes through memory
  1444.               which must be swapped out to pop up
  1445.             0002h swap-in failed
  1446.         CX = application's reason code if nonzero
  1447.         FFh TSR popped up and was exited by user
  1448.         BX = return value
  1449.             0000h no return value
  1450.             0001h TSR unloaded
  1451.             0002h-00FFh reserved
  1452.             0100h-FFFFh application-dependent
  1453. Note:    this function is not valid unless a program is installed on the
  1454.       specified multiplex number; use INT 2D/AL=00h to check
  1455. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=04h,INT 2D/AL=05h
  1456. SeeAlso: INT 2D/AL=06h
  1457. --------t-2D--04-----------------------------
  1458. INT 2D - AMIS v3.0+ - DETERMINE CHAINED INTERRUPTS
  1459.     AL = 04h
  1460.     AH = multiplex number for program
  1461.     BL = interrupt number (except 2Dh)
  1462. Return: AL = status
  1463.         00h not implemented (makes TSR non-compliant with specification)
  1464.         01h (obsolete) unable to determine
  1465.         02h (obsolete) interrupt hooked
  1466.         03h (obsolete) interrupt hooked, address returned
  1467.         DX:BX -> TSR's interrupt BL handler
  1468.         04h list of hooked interrupts returned
  1469.         DX:BX -> interrupt hook list (see #02571)
  1470.         FFh interrupt not hooked
  1471. Notes:    BL is ignored if the TSR returns AL=04h; in that case, the caller
  1472.       needs to scan the return list rather than making additional calls
  1473.       to this function.  If the return is not 00h or 04h, then the caller
  1474.       must cycle through the remaining interrupt numbers it wishes to
  1475.       check.
  1476.     return values 01h through 03h may not be used by AMIS v3.6-compliant
  1477.       programs; they are included here solely for compatibility with
  1478.       version 3.3, though they were probably never used in any
  1479.       implementation
  1480.     for return values 01h through 03h, since INT 2D is known to be hooked,
  1481.       the resident code need not test for BL=2Dh (to minimize its size),
  1482.       and the return value is therefore undefined in that case.
  1483.     this function is not valid unless a program is installed on the
  1484.       specified multiplex number; use INT 2D/AL=00h to check
  1485. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=05h
  1486. SeeAlso: INT 2D/AL=06h
  1487.  
  1488. Format of AMIS interrupt hook list [array]:
  1489. Offset    Size    Description    (Table 02571)
  1490.  00h    BYTE    interrupt number (last entry in array is 2Dh)
  1491.  01h    WORD    offset within hook list's segment of the interrupt handler
  1492.         this will point at the initial short jump of the interrupt
  1493.           sharing protocol header (see #02568)
  1494. SeeAlso: #02572
  1495. --------t-2D--05-----------------------------
  1496. INT 2D - AMIS v3.5+ - GET HOTKEYS
  1497.     AL = 05h
  1498.     AH = multiplex number for program
  1499. Return: AL = status
  1500.         00h not implemented
  1501.         FFh supported
  1502.         DX:BX -> hotkey list (see #02572)
  1503. Notes:    this function is not valid unless a program is installed on the
  1504.       specified multiplex number; use INT 2D/AL=00h to check
  1505.     programs which provide hotkeys are required to provide this function
  1506.       to be fully compliant with this specification
  1507. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h
  1508. SeeAlso: INT 2D/AL=06h
  1509.  
  1510. Format of AMIS hotkey list:
  1511. Offset    Size    Description    (Table 02572)
  1512.  00h    BYTE    type of hotkey checking (see #02573)
  1513.  01h    BYTE    number of hotkeys (may be zero if TSR can disable hotkeys)
  1514.  02h 6N BYTEs    array of hotkey definitions
  1515.         (one per hotkey, first should be primary hotkey)
  1516.         Offset    Size    Description
  1517.          00h    BYTE    hotkey scan code (00h/80h if shift states only)
  1518.                 hotkey triggers on release if bit 7 set
  1519.          01h    WORD    required shift states (see #02574)
  1520.          03h    WORD    disallowed shift states (see #02574)
  1521.          05h    BYTE    hotkey flags (see #02575)
  1522. Notes:    except for bit 7, the shift states correspond exactly to the return
  1523.       values from INT 16/AH=12h.  A set bit in the required states word
  1524.       indicates that the corresponding shift state must be active when the
  1525.       hotkey's scan code is received for the hotkey to be recognized; a
  1526.       clear bit means that the corresponding state may be ignored.    A set
  1527.       bit in the disallowed shift states word indicates that the
  1528.       corresponding shift state must be inactive.
  1529.     for the disallowed-states word, if one of the "either" bits is set,
  1530.       then both the corresponding left bit and right bit must be set
  1531.     examples:
  1532.         Ctrl-Alt-Del monitoring: 53h 000Ch 0003h 06h
  1533.         Alt-key tap (DESQview):     B8h 0000h 0007h 08h
  1534.         Shf-Shf-N (NOTE.COM):     31h 0003h 000Ch 00h
  1535. Index:    hotkeys;AMIS
  1536. SeeAlso: #00006
  1537.  
  1538. Bitfields for type of AMIS hotkey checking:
  1539. Bit(s)    Description    (Table 02573)
  1540.  0    checks before chaining INT 09
  1541.  1    checks after chaining INT 09
  1542.  2    checks before chaining INT 15/AH=4Fh
  1543.  3    checks after chaining INT 15/AH=4Fh
  1544.  4    checks on INT 16/AH=00h,01h,02h
  1545.  5    checks on INT 16/AH=10h,11h,12h
  1546.  6    checks on INT 16/AH=20h,21h,22h
  1547.  7    reserved (0)
  1548. SeeAlso: #02572
  1549.  
  1550. Bitfields for AMIS shift states:
  1551. Bit(s)    Description    (Table 02574)
  1552.  0    right shift pressed
  1553.  1    left shift pressed
  1554.  2    either control key pressed
  1555.  3    either Alt key pressed
  1556.  4    ScrollLock active
  1557.  5    NumLock active
  1558.  6    CapsLock active
  1559.  7    either shift key pressed
  1560.  8    left control key pressed
  1561.  9    left Alt key pressed
  1562.  10    right control key pressed
  1563.  11    right Alt key pressed
  1564.  12    ScrollLock pressed
  1565.  13    NumLock pressed
  1566.  14    CapsLock pressed
  1567.  15    SysReq key pressed
  1568. Notes:    if bit 2 is set, either control key may be pressed for the hotkey; if
  1569.       bits 8 and 10 are both set, then both control keys must be pressed.
  1570.       Similarly for bits 3 and 9/11, as well as 7 and 0/1.
  1571.     the SysReq key is often labeled SysRq
  1572. SeeAlso: #02572,#02575
  1573.  
  1574. Bitfields for AMIS hotkey flags:
  1575. Bit(s)    Description    (Table 02575)
  1576.  0    hotkey chained before processing
  1577.  1    hotkey chained after processing
  1578.  2    others should pass through this hotkey so that it can be monitored
  1579.  3    hotkey will not activate if other keys pressed/released before hotkey
  1580.       press is completed
  1581.  4    this key is remapped into some other key
  1582.  5    this key is conditionally chained (sometimes passed on, sometimes
  1583.       swallowed)
  1584.  6-7    reserved (0)
  1585. SeeAlso: #02572,#02574
  1586. --------t-2D--06-----------------------------
  1587. INT 2D - AMIS v3.6 - GET DEVICE-DRIVER INFORMATION
  1588.     AL = 06h
  1589.     AH = multiplex number for program
  1590. Return: AL = number of device driver headers supplied by prog.
  1591.     AH = device-driver flags (see #02576)
  1592.     DX:BX -> first device driver header (see #01646)
  1593. Program: AMIS is the Alternate Multiplex Interrupt Specification promulgated
  1594.       by Ralf Brown
  1595. Notes:    if AL=00h, AH,BX,DX are meaningless and may be destroyed
  1596.     this function is not valid unless a program is installed on the
  1597.       specified multiplex number; use INT 2D/AL=00h to check
  1598.     programs which provide device drivers are required to support this
  1599.       function to be considered fully compliant with v3.6+ of the
  1600.       specification
  1601. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h
  1602. SeeAlso: INT 2D/AL=05h
  1603.  
  1604. Bitfields for AMIS device-driver information flags:
  1605. Bit(s)    Description    (Table 02576)
  1606.  0    program loaded from CONFIG.SYS, and thus can not be removed from memory
  1607.     (leave clear if unable to determine)
  1608.  1    device driver headers have not been linked into DOS device chain
  1609.  2    reentrant device driver(s)
  1610. --------N-2D--10-----------------------------
  1611. INT 2D - RATSR 2.0+ - GET STATUS
  1612.     AL = 10h
  1613.     AH = AMIS multiplex number for RATSR
  1614. Return: AL = status
  1615.         01h listening (no connection)
  1616.         02h receiving          \
  1617.         03h sending               > station being monitored
  1618.         04h initializing receive  /
  1619.     AH = keyboard lock status (00h unlocked, 01h locked)
  1620. Program: RATSR is a utility by James Berry provided with
  1621.       RemoteAccess/Professional, a commercial bulletin board system, that
  1622.       allows remote control of a station over a network
  1623. SeeAlso: INT 2D"AMIS"
  1624. --------d-2D--10-----------------------------
  1625. INT 2D - dLite 1.0+ - GET PARAMETER BLOCK ADDRESS
  1626.     AL = 10h
  1627.     AH = AMIS multiplex number for dLite
  1628. Return: CF clear if successful
  1629.         ES:BX -> parameter block (see #02577)
  1630.     CF set on error
  1631. Program: dLite is a shareware TSR by Rainer Schuetze which transparently
  1632.       expands compressed files when they are read
  1633. SeeAlso: AL=11h"dLite",AL=12h"dLite",INT 21/AX=FEDCh"PCMANAGE"
  1634.  
  1635. Format of dLite parameter block:
  1636. Offset    Size    Description    (Table 02577)
  1637.  00h    BYTE    TSR flags (see #02578)
  1638.  01h    WORD    maximum number of programs needing original filesize
  1639.  03h    WORD    current number of programs needing original filesize
  1640.  05h    WORD    maximum number of files that can be handled by dLite (should
  1641.           be the same as FILES= in CONFIG.SYS)
  1642.  07h    WORD    offset (in the same segment as the parameter block) of the
  1643.           table of programs needing the original filesize (8 bytes
  1644.           each,    without path or extension, uppercase, and zero \
  1645.           terminated if    shorter than 8 bytes)
  1646.  
  1647. Bitfields for dLite TSR flags:
  1648. Bit(s)    Description    (Table 02578)
  1649.  0    deny FCB access
  1650.  1    dLite sleeping rather than activated
  1651.  2    always indicate original filesize when reading directory entries,
  1652.       rather than only for specified programs
  1653.  3-7    reserved
  1654. SeeAlso: #02577
  1655. --------V-2D--10-----------------------------
  1656. INT 2D - Burnout Plus v3.00 - GET STATE/CONTROL INFORMATION
  1657.     AL = 10h
  1658.     AH = AMIS multiplex number for Burnout Plus
  1659. Return: AL = 01h
  1660.     BX = Burnout Plus status (see #02579)
  1661.     CX = record of features loaded (see #02580)
  1662.     ES:DI -> Burnout Plus control structure (see #02581)
  1663. Program: Burnout Plus is a DOS screen saver from Cove Software
  1664. SeeAlso: INT 14/AX=AA01h,INT 2D"AMIS"
  1665. Index:    screen saver;Burnout Plus
  1666.  
  1667. Bitfields for Burnout Plus status:
  1668. Bit(s)    Description    (Table 02579)
  1669.  0    screen is blanked
  1670.  1    MS Windows is active (Burnout Plus deactivated)
  1671.  2-15    reserved
  1672.  
  1673. Bitfields for Burnout Plus features loaded/features enabled:
  1674. Bit(s)    Description    (Table 02580)
  1675.  0    mouse activity monitor
  1676.  1    passkey support
  1677.  2    password support
  1678.  3    continuous clear
  1679.  4    software blanking
  1680.  5    video activity monitor
  1681.  6    disk activity monitor
  1682.  7    activating keystroke suppression
  1683. SeeAlso: #02581
  1684.  
  1685. Format of Burnout Plus control structure:
  1686. Offset    Size    Description    (Table 02581)
  1687.  00h    BYTE    size of structure in bytes
  1688.  01h    WORD    Burnout Plus version
  1689.  03h    WORD    screen blanking reset count in clock ticks
  1690.  05h    WORD    current countdown value in clock ticks
  1691.  07h    BYTE    type of timeout specification
  1692.  08h    BYTE    instant-blank hotkey
  1693.  09h    WORD    extended status information (see #02582)
  1694.         the bits for password, passkey, and software blanking are
  1695.           ignored and cannot be enabled or disabled externally
  1696.  0Bh    WORD    features enabled (see #02580)
  1697. Note:    all fields except the first two may be modified by external programs
  1698.       to affect the operation of Burnout Plus
  1699. Index:    hotkeys;Burnout Plus
  1700.  
  1701. Bitfields for extended Burnout Plus status information:
  1702. Bit(s)    Description    (Table 02582)
  1703.  0    Burnout Plus disabled
  1704.  1    force screen to blank on next clock tick
  1705.  2    restore screen if currently blanked
  1706.  3-15    reserved
  1707. Note:    1 and 2 are automatically cleared by Burnout Plus after blanking
  1708.       or restoring the screen
  1709. SeeAlso: #02581
  1710. --------V-2D--10-----------------------------
  1711. INT 2D U - Screen Thief v1.00 - FREE HIGH MEMORY BUFFERS
  1712.     AL = 10h
  1713.     AH = AMIS multiplex number for Screen Thief
  1714. Return: nothing
  1715. Program: Screen Thief is a graphics screen grabber
  1716. Note:    releases any code and data stored in EMS, DOS UMBs, or XMS UMBs, but
  1717.       does not release the low-memory stub; this may be used to effect a
  1718.       partial uninstall if INT 2D/AL=02h fails
  1719. SeeAlso: INT D8"Screen Thief"
  1720. --------i-2D--10-----------------------------
  1721. INT 2D U - RAMLIGHT v1.0 - GET MONITORING INFORMATION
  1722.     AL = 10h
  1723.     AH = AMIS multiplex number for RAMLIGHT
  1724. Return: ES:BX -> array of fake device driver headers used in monitoring
  1725.     CX = number of drives being monitored???
  1726. --------U-2D--10-----------------------------
  1727. INT 2D - DTown Utilities v1.40+ - EXTENDED API INSTALLATION CHECK
  1728.     AL = 10h
  1729. Return: AL = FFh
  1730.     BL = extended API availability (00h no, 01h API is loaded)
  1731. SeeAlso: INT 2D/AL=11h"DTown",INT 2D/AL=20h,INT 2D/AL=50h
  1732. --------s-2D--10-----------------------------
  1733. INT 2D - CDTSR - GET INTERNAL VARIABLE TABLE
  1734.     AL = 10h
  1735.     AH = AMIS multiplex number for CDTSR
  1736. Return: CX:DX -> CDTSR internal variable structure (see #02583)
  1737. Program: CDTSR is a resident audio CD player by Colin Hill
  1738. SeeAlso: INT 2D/AL=11h"CDTSR",INT 2D/AL=12h"CDTSR",INT 2D/AL=13h"CDTSR"
  1739.  
  1740. Format of CDTSR internal variable structure:
  1741. Offset    Size    Description    (Table 02583)
  1742.  00h    BYTE    hotkey scan code (see #00006)
  1743.  01h    BYTE    hotkey shift states
  1744.  02h    BYTE    flag: repeat
  1745.  03h    BYTE    flag: custom repeat
  1746.  04h    BYTE    flag: background polling
  1747.  05h    DWORD    (read-only) internal timing variable
  1748.  09h    DWORD    current track play position, in frames
  1749.  0Dh    DWORD    current disk play position, in frames
  1750.  11h    BYTE    number of entries in track program
  1751.  12h    BYTE    index into track program currently playing (FFh if not playing)
  1752.  13h 100 BYTEs    track program (each byte contains one track number)
  1753.  77h    BYTE    saved cursor end scan line
  1754.  78h    BYTE    saved cursor start scan line
  1755.  79h    BYTE    currently playing track
  1756.  7Ah    BYTE    CD driver media-change flag
  1757.  7Bh    WORD    video base segment during last popup
  1758.  7Dh    WORD    video page offset during last popup
  1759.  7Fh    BYTE    currently-selected track
  1760.  80h    DWORD    begin of custom repeat, in frames
  1761.  84h    DWORD    end of custom repeat, in frames
  1762.  88h    WORD    track program index of top list item
  1763. --------K-2D--10-----------------------------
  1764. INT 2D - KEYBIT Lite v5+ - GET POINTER TO STATUS BYTE
  1765.     AL = 10h
  1766.     AH = AMIS multiplex number for KEYBIT Lite
  1767. Return: DX:BX -> status byte (see #02584)
  1768. Program: KEYBIT Lite is an enhanced Italian keyboard driver by Pino Navato.
  1769. SeeAlso: INT 2D"AMIS"
  1770.  
  1771. Bitfields for KEYBIT Lite status byte:
  1772. Bit(s)    Description    (Table 02584)
  1773.  7    KEYBIT Lite active
  1774.  6    E-mail support active
  1775.  5-0    reserved
  1776. Notes:    E-mail support is one of the original features of KEYBIT Lite.    It is
  1777.       the automatic conversion of the 8-bits ASCII chars produced by some
  1778.       keys available on Italian keyboards to couples of 7-bits chars.
  1779.     Message editors should always enable e-mail support, they should also
  1780.       restore its original status before exiting.
  1781.     The user can change both status bits by hotkeys.
  1782. --------K-2D--10-----------------------------
  1783. INT 2D - ALTMENU - GET POINTER TO KEY CODE
  1784.     AL = 10h
  1785.     AH = AMIS multiplex number for signature 'Pino Nav' 'ALTMENU '
  1786. Return: DX:BX -> WORD key code to insert in keyboard buffer on Alt-key tap
  1787. Program: Pino Navato's freeware ALTMENU permits activating the menu bar of
  1788.       any program by pressing the Alt key alone.
  1789. Notes:    The value in the key code word will be returned in AX by a call to
  1790.       INT 16/AH=00h after the Alt key is pressed by itself
  1791.     ALTMENU may be disabled by setting the key code equal to 0000h
  1792. SeeAlso: INT 16/AH=00h,INT 2D"AMIS"
  1793. --------d-2D--11-----------------------------
  1794. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET ORIGINAL SIZE
  1795.     AL = 11h
  1796.     AH = AMIS multiplex number for dLite
  1797.     BX = file handle
  1798. Return: CF clear if successful
  1799.         DX:AX = size of uncompressed file
  1800.     CF set on error (not dPressed file)
  1801. SeeAlso: AL=10h"dLite",AL=12h"dLite"
  1802. --------U-2D--11-----------------------------
  1803. INT 2D - DTown Utilities v1.40+ - UTILITY INSTALLATION CHECK
  1804.     AL = 11h
  1805.     BL = function
  1806.         00h get number of installed utilities
  1807.         Return: BL = number of utilities
  1808.         01h get installed utilities
  1809.         DX:DI -> buffer containing one byte for each utility
  1810.         Return: DX:DI buffer filled with flags (0=no,1=yes) indicating
  1811.               whether the corresponding utility is loaded
  1812. Return: AL = FFh if supported
  1813. Note:    this function is only available if the extended API has been installed
  1814.       in the resident portion
  1815. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h
  1816. --------s-2D--11-----------------------------
  1817. INT 2D - CDTSR - REPROGRAM CDTSR
  1818.     AL = 11h
  1819.     AH = AMIS multiplex number for CDTSR
  1820. Return: nothing
  1821. Program: CDTSR is a resident audio CD player by Colin Hill
  1822. Desc:    reprograms CDTSR based on the values in the internal variable
  1823.       structure (see #02583), which may have been changed by an application
  1824. SeeAlso: INT 2D/AL=10h"CDTSR",INT 2D/AL=12h"CDTSR",INT 2D/AL=13h"CDTSR"
  1825. --------d-2D--12-----------------------------
  1826. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET COMPRESSED SIZE
  1827.     AL = 12h
  1828.     AH = AMIS multiplex number for dLite
  1829.     BX = file handle
  1830. Return: CF clear if successful
  1831.         DX:AX = size of compressed file
  1832.     CF set on error (not dPressed file)
  1833. SeeAlso: AL=10h"dLite",AL=11h"dLite"
  1834. --------s-2D--12-----------------------------
  1835. INT 2D - CDTSR - DISABLE POPUP
  1836.     AL = 12h
  1837.     AH = AMIS multiplex number for CDTSR
  1838. Return: nothing
  1839. SeeAlso: INT 2D/AL=10h"CDTSR",INT 2D/AL=11h"CDTSR",INT 2D/AL=13h"CDTSR"
  1840. --------U-2D--12-----------------------------
  1841. INT 2D - FREEVER - GET ORIGINAL DOS VERSION INFO
  1842.     AL = 12h
  1843.     AH = AMIS multiplex number for FREEVER
  1844. Return: AL = FFh if successful
  1845.         BH = major DOS version
  1846.         BL = minor DOS version
  1847.         CH = DOS version flag
  1848.         CL = OEM number
  1849.         DH = major DR DOS version number (FFh if unknown)
  1850.         DL = minor DR DOS version number (FFh if unknown)
  1851. Program: FREEVER is an AMIS-conformant freeware DOS version-faking TSR similar
  1852.       to SETVER for any DOS-compatible OS, written by Matthias Paul
  1853. SeeAlso: INT 2D/AL=13h"FREEVER",INT 2D/AL=14h"FREEVER",INT 2D/AL=17h"FREEVER"
  1854. --------s-2D--13-----------------------------
  1855. INT 2D - CDTSR - ENABLE POPUP
  1856.     AL = 13h
  1857.     AH = AMIS multiplex number for CDTSR
  1858. Return: nothing
  1859. Program: CDTSR is a resident audio CD player by Colin Hill
  1860. SeeAlso: INT 2D/AL=10h"CDTSR",INT 2D/AL=11h"CDTSR",INT 2D/AL=12h"CDTSR"
  1861. --------U-2D--13-----------------------------
  1862. INT 2D - FREEVER - SET VERSION NUMBERS
  1863.     AL = 13h
  1864.     AH = AMIS multiplex number for FREEVER
  1865.     BH = new major DOS version
  1866.     BL = new minor DOS version
  1867.     CH = new DOS version flag
  1868.     CL = new DOS revision number
  1869.     DH = new OEM number
  1870. SeeAlso: INT 2D/AL=12h"FREEVER",INT 2D/AL=15h"FREEVER",INT 2D/AL=17h"FREEVER"
  1871. --------U-2D--14-----------------------------
  1872. INT 2D - FREEVER - ENABLE TSR
  1873.     AL = 14h
  1874.     AH = AMIS multiplex number for FREEVER
  1875. Return: AL = FFh if successful
  1876. SeeAlso: INT 2D/AL=12h"FREEVER",INT 2D/AL=15h"FREEVER",INT 2D/AL=16h"FREEVER"
  1877. --------U-2D--15-----------------------------
  1878. INT 2D - FREEVER - DISABLE TSR
  1879.     AL = 15h
  1880.     AH = AMIS multiplex number for FREEVER
  1881. Return: AL = FFh if successful
  1882. SeeAlso: INT 2D/AL=12h"FREEVER",INT 2D/AL=14h"FREEVER",INT 2D/AL=16h"FREEVER"
  1883. --------U-2D--16-----------------------------
  1884. INT 2D - FREEVER - GET TSR STATUS
  1885.     AL = 16h
  1886.     AH = AMIS multiplex number for FREEVER
  1887. Return: AL = FFh if successful
  1888.         BL = status
  1889.         01h resident and active
  1890.         02h resident and inactive
  1891. SeeAlso: INT 2D/AL=12h"FREEVER",INT 2D/AL=15h"FREEVER",INT 2D/AL=17h"FREEVER"
  1892. --------U-2D--17-----------------------------
  1893. INT 2D - FREEVER - GET TaskMAX STATUS AT INSTALLATION
  1894.     AL = 17h
  1895.     AH = AMIS multiplex number for FREEVER
  1896. Return: AL = FFh if successful
  1897.         BL = status
  1898.         00h if TaskMAX not loaded before SETDRVER
  1899.         FFh if TaskMAX was loaded before SETDRVER
  1900. Program: FREEVER is an AMIS-conformant freeware DOS version-faking TSR similar
  1901.       to SETVER for any DOS-compatible OS, written by Matthias Paul
  1902. SeeAlso: INT 2D/AL=12h"FREEVER",INT 2D/AL=14h"FREEVER",INT 2D/AL=16h"FREEVER"
  1903. --------U-2D--20-----------------------------
  1904. INT 2D - DTown Utilities v1.40+ - GET POP-UP HANDLER ADDRESS
  1905.     AL = 20h
  1906. Return: AL = FFh if available
  1907.         DX:DI -> DTU popup-handler
  1908. Program: DTown Utilities is a freeware programmer's utility TSR by Jeroen van
  1909.       Disseldorp
  1910. Note:    this function is only available if the extended API has been installed
  1911.       in the resident portion
  1912. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=21h,INT 2D/AL=50h,INT 2D/AL=51h
  1913. SeeAlso: INT 03"DTown"
  1914. --------U-2D--21-----------------------------
  1915. INT 2D - DTown Utilities v1.40+ - POP UP
  1916.     AL = 21h
  1917.     BL = which utility to bring up
  1918.         00h active utility
  1919.         01h help screen
  1920.         0Ah ASCII table
  1921.         0Bh memory view
  1922.         0Ch CPU status
  1923.         0Dh calculator
  1924.         0Eh miscellaneous
  1925.         0Fh file viewer
  1926.         10h disassembler
  1927. Return: AL = status
  1928.         00h already active
  1929.         FFh popped up successfully
  1930.     BX = 0000h
  1931. Note:    this function is only available if the extended API has been installed
  1932.       in the resident portion
  1933. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h,INT 2D/AL=50h
  1934. --------U-2D--50-----------------------------
  1935. INT 2D - DTown Utilities v1.40+ - MEMORY VIEW SET ADDRESS
  1936.     AL = 50h
  1937.     CX:DX = new address for start of memory view utility's display
  1938. Note:    this function is only available if the extended API has been installed
  1939.       in the resident portion
  1940. Return: AL = FFh if supported
  1941. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h,INT 2D/AL=21h,INT 2D/AL=51h
  1942. --------U-2D--51-----------------------------
  1943. INT 2D - DTown Utilities v1.40+ - MEMORY VIEW SET REFERENCE
  1944.     AL = 51h
  1945.     BL = reference ("bookmark") number
  1946.     CX:DX = new address for reference
  1947. Return: AL = status
  1948.         00h invalid index
  1949.         FFh reference set
  1950. Note:    this function is only available if the extended API has been installed
  1951.       in the resident portion
  1952. Program: DTown Utilities is a shareware programmer's utility TSR by Jeroen van
  1953.       Disseldorp
  1954. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h,INT 2D/AL=50h
  1955. --------b-2D--DC-----------------------------
  1956. INT 2D C - DAISY.SYS - BROADCAST: CHAIN RESCANNED
  1957.     AL = DCh
  1958.     AH = AMIS multiplex number for signature 'DAISYCHA' 'INDRIVER'
  1959.     DL = LPT Port Rescanned
  1960. Program: DAISY.SYS is a daisy chain manager for parallel port peripherals
  1961.       conforming to the IEEE 1284.3 Committee's daisy chain specification.
  1962. Desc:    This Broadcast is sent whenever daisy chain IDs are reassigned to
  1963.       warn parallel port device drivers that their daisy chain ID may
  1964.       have been changed.
  1965. Note:    This function is a callout from DAISY.SYS, NOT a call into DAISY.SYS
  1966. SeeAlso: INT 17/AX=0200h"Enhanced Parallel Port",#00633,#02570
  1967. --------l-2E---------------------------------
  1968. INT 2E U - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION
  1969.     DS:SI -> commandline to execute (see #02585)
  1970. Return: all registers except CS:IP destroyed
  1971.     AX = status (4DOS v4.0)
  1972.        0000h successful
  1973.        FFFFh error before processing command (not enough memory, etc)
  1974.        other error number returned by command
  1975. Notes:    this call allows execution of arbitrary commands (including COMMAND.COM
  1976.       internal commands) without loading another copy of COMMAND.COM
  1977.     if COMMAND.COM is the user's command interpreter, the primary copy
  1978.       executes the command; this allows the master environment to be
  1979.       modified by issuing a "SET" command, but changes in the master
  1980.       environment will not become effective until all programs descended
  1981.       from the primary COMMAND.COM terminate
  1982.     since COMMAND.COM processes the string as if typed from the keyboard,
  1983.       the transient portion needs to be present, and the calling program
  1984.       must ensure that sufficient memory to load the transient portion can
  1985.       be allocated by DOS if necessary
  1986.     results are unpredictable if invoked by a program run from a batch file
  1987.       because this call is not reentrant and COMMAND.COM uses the same
  1988.       internal variables when processing a batch file
  1989.     hooked but ignored by 4DOS v3.0 COMMAND.COM replacement unless SHELL2E
  1990.       has been loaded
  1991.     the MS-DOS 5 Programmer's Reference calls this "Reload Transient"
  1992.  
  1993. Format of DOS commandline:
  1994. Offset    Size    Description    (Table 02585)
  1995.  00h    BYTE    length of command string, not counting trailing CR
  1996.  01h    var    command string
  1997.   N    BYTE    0Dh (CR)
  1998. --------O-2E---------------------------------
  1999. INT 2E UP - Windows NT - NATIVE API
  2000.     EAX = function number (see #02586)
  2001.     EDX = address of parameter block
  2002. Return: ???
  2003.  
  2004. (Table 02586)
  2005. Values for Windows NT NTOS function number:
  2006.  000h    AcceptConnectPort    (24 bytes of parameters)
  2007.  001h    AccessCheck        (32 bytes of parameters)
  2008.  002h    AccessCheckAndAuditAlarm    (44 bytes of parameters)
  2009.  003h    AddAtom            (8 bytes of parameters)
  2010.  004h    AdjustGroupsToken    (24 bytes of parameters)
  2011.  005h    AdjustPrivilegesToken    (24 bytes of parameters)
  2012.  006h    AlertResumeThread    (8 bytes of parameters)
  2013.  007h    AlertThread        (4 bytes of parameters)
  2014.  008h    AllocateLocallyUniqueId    (4 bytes of parameters)
  2015.  009h    AllocateUuids        (12 bytes of parameters)
  2016.  00Ah    AllocateVirtualMemory    (24 bytes of parameters)
  2017.  00Bh    CallbackReturn        (12 bytes of parameters)
  2018.  00Ch    CancelIoFile        (8 bytes of parameters)
  2019.  00Dh    CancelTimer        (8 bytes of parameters)
  2020.  00Eh    ClearEvent        (4 bytes of parameters)
  2021.  00Fh    Close            (4 bytes of parameters)
  2022.  010h    CloseObjectAuditAlarm    (12 bytes of parameters)
  2023.  011h    CompleteConnectPort    (4 bytes of parameters)
  2024.  012h    ConnectPort        (32 bytes of parameters)
  2025.  013h    Continue        (8 bytes of parameters)
  2026.  014h    CreateDirectoryObject    (12 bytes of parameters)
  2027.  015h    CreateEvent        (20 bytes of parameters)
  2028.  016h    CreateEventPair        (12 bytes of parameters)
  2029.  017h    CreateFile        (44 bytes of parameters)
  2030.  018h    CreateIoCompletion    (16 bytes of parameters)
  2031.  019h    CreateKey        (28 bytes of parameters)
  2032.  01Ah    CreateMailslotFile    (32 bytes of parameters)
  2033.  01Bh    CreateMutant        (16 bytes of parameters)
  2034.  01Ch    CreateNamedPipeFile    (56 bytes of parameters)
  2035.  01Dh    CreatePagingFile    (16 bytes of parameters)
  2036.  01Eh    CreatePort        (20 bytes of parameters)
  2037.  01Fh    CreateProcess        (32 bytes of parameters)
  2038.  020h    CreateProfile        (36 bytes of parameters)
  2039.  021h    CreateSection        (28 bytes of parameters)
  2040.  022h    CreateSemaphore        (20 bytes of parameters)
  2041.  023h    CreateSymbolicLinkObject    (16 bytes of parameters)
  2042.  024h    CreateThread        (32 bytes of parameters)
  2043.  025h    CreateTimer        (16 bytes of parameters)
  2044.  026h    CreateToken        (52 bytes of parameters)
  2045.  027h    DelayExecution        (8 bytes of parameters)
  2046.  028h    DeleteAtom        (4 bytes of parameters)
  2047.  029h    DeleteFile        (4 bytes of parameters)
  2048.  02Ah    DeleteKey        (4 bytes of parameters)
  2049.  02Bh    DeleteObjectAuditAlarm    (12 bytes of parameters)
  2050.  02Ch    DeleteValueKey        (8 bytes of parameters)
  2051.  02Dh    DeviceIoControlFile    (40 bytes of parameters)
  2052.  02Eh    DisplayString        (4 bytes of parameters)
  2053.  02Fh    DuplicateObject        (28 bytes of parameters)
  2054.  030h    DuplicateToken        (24 bytes of parameters)
  2055.  031h    EnumerateKey        (24 bytes of parameters)
  2056.  032h    EnumerateValueKey    (24 bytes of parameters)
  2057.  033h    ExtendSection        (8 bytes of parameters)
  2058.  034h    FindAtom        (8 bytes of parameters)
  2059.  035h    FlushBuffersFile    (8 bytes of parameters)
  2060.  036h    FlushInstructionCache    (12 bytes of parameters)
  2061.  037h    FlushKey        (4 bytes of parameters)
  2062.  038h    FlushVirtualMemory    (16 bytes of parameters)
  2063.  039h    FlushWriteBuffer    (no parameters)
  2064.  03Ah    FreeVirtualMemory    (16 bytes of parameters)
  2065.  03Bh    FsControlFile        (40 bytes of parameters)
  2066.  03Ch    GetContextThread    (8 bytes of parameters)
  2067.  03Dh    GetPlugPlayEvent    (16 bytes of parameters)
  2068.  03Eh    GetTickCount        (no parameters)
  2069.  03Fh    ImpersonateClientOfPort    (8 bytes of parameters)
  2070.  040h    ImpersonateThread    (12 bytes of parameters)
  2071.  041h    InitializeRegistry    (4 bytes of parameters)
  2072.  042h    ListenPort        (8 bytes of parameters)
  2073.  043h    LoadDriver        (4 bytes of parameters)
  2074.  044h    LoadKey    (8 bytes of parameters)
  2075.  045h    LoadKey2        (12 bytes of parameters)
  2076.  046h    LockFile        (40 bytes of parameters)
  2077.  047h    LockVirtualMemory    (16 bytes of parameters)
  2078.  048h    MakeTemporaryObject    (4 bytes of parameters)
  2079.  049h    MapViewOfSection    (40 bytes of parameters)
  2080.  04Ah    NotifyChangeDirectoryFile    (36 bytes of parameters)
  2081.  04Bh    NotifyChangeKey        (40 bytes of parameters)
  2082.  04Ch    OpenDirectoryObject    (12 bytes of parameters)
  2083.  04Dh    OpenEvent        (12 bytes of parameters)
  2084.  04Eh    OpenEventPair        (12 bytes of parameters)
  2085.  04Fh    OpenFile        (24 bytes of parameters)
  2086.  050h    OpenIoCompletion    (12 bytes of parameters)
  2087.  051h    OpenKey            (12 bytes of parameters)
  2088.  052h    OpenMutant        (12 bytes of parameters)
  2089.  053h    OpenObjectAuditAlarm    (48 bytes of parameters)
  2090.  054h    OpenProcess        (16 bytes of parameters)
  2091.  055h    OpenProcessToken    (12 bytes of parameters)
  2092.  056h    OpenSection        (12 bytes of parameters)
  2093.  057h    OpenSemaphore        (12 bytes of parameters)
  2094.  058h    OpenSymbolicLinkObject    (12 bytes of parameters)
  2095.  059h    OpenThread        (16 bytes of parameters)
  2096.  05Ah    OpenThreadToken        (16 bytes of parameters)
  2097.  05Bh    OpenTimer        (12 bytes of parameters)
  2098.  05Ch    PlugPlayControl        (16 bytes of parameters)
  2099.  05Dh    PrivilegeCheck        (12 bytes of parameters)
  2100.  05Eh    PrivilegedServiceAuditAlarm    (20 bytes of parameters)
  2101.  05Fh    PrivilegeObjectAuditAlarm    (24 bytes of parameters)
  2102.  060h    ProtectVirtualMemory    (20 bytes of parameters)
  2103.  061h    PulseEvent        (8 bytes of parameters)
  2104.  062h    QueryInformationAtom    (20 bytes of parameters)
  2105.  063h    QueryAttributesFile    (8 bytes of parameters)
  2106.  064h    QueryDefaultLocale    (8 bytes of parameters)
  2107.  065h    QueryDirectoryFile    (44 bytes of parameters)
  2108.  066h    QueryDirectoryObject    (28 bytes of parameters)
  2109.  067h    QueryEaFile        (36 bytes of parameters)
  2110.  068h    QueryEvent        (20 bytes of parameters)
  2111.  069h    QueryFullAttributesFile    (8 bytes of parameters)
  2112.  06Ah    QueryInformationFile    (20 bytes of parameters)
  2113.  06Bh    QueryIoCompletion    (20 bytes of parameters)
  2114.  06Ch    QueryInformationPort    (20 bytes of parameters)
  2115.  06Dh    QueryInformationProcess    (20 bytes of parameters)
  2116.  06Eh    QueryInformationThread    (20 bytes of parameters)
  2117.  06Fh    QueryInformationToken    (20 bytes of parameters)
  2118.  070h    QueryIntervalProfile    (8 bytes of parameters)
  2119.  071h    QueryKey        (20 bytes of parameters)
  2120.  072h    QueryMultipleValueKey    (24 bytes of parameters)
  2121.  073h    QueryMutant        (20 bytes of parameters)
  2122.  074h    QueryObject        (20 bytes of parameters)
  2123.  075h    QueryOleDirectoryFile    (44 bytes of parameters)
  2124.  076h    QueryPerformanceCounter    (8 bytes of parameters)
  2125.  077h    QuerySection        (20 bytes of parameters)
  2126.  078h    QuerySecurityObject    (20 bytes of parameters)
  2127.  079h    QuerySemaphore        (20 bytes of parameters)
  2128.  07Ah    QuerySymbolicLinkObject    (12 bytes of parameters)
  2129.  07Bh    QuerySystemEnvironmentValue    (16 bytes of parameters)
  2130.  07Ch    QuerySystemInformation    (16 bytes of parameters)
  2131.  07Dh    QuerySystemTime        (4 bytes of parameters)
  2132.  07Eh    QueryTimer        (20 bytes of parameters)
  2133.  07Fh    QueryTimerResolution    (12 bytes of parameters)
  2134.  080h    QueryValueKey        (24 bytes of parameters)
  2135.  081h    QueryVirtualMemory    (24 bytes of parameters)
  2136.  082h    QueryVolumeInformationFile    (20 bytes of parameters)
  2137.  083h    QueueApcThread        (20 bytes of parameters)
  2138.  084h    RaiseException        (12 bytes of parameters)
  2139.  085h    RaiseHardError        (24 bytes of parameters)
  2140.  086h    ReadFile        (36 bytes of parameters)
  2141.  087h    ReadFileScatter        (36 bytes of parameters)
  2142.  088h    ReadRequestData        (24 bytes of parameters)
  2143.  089h    ReadVirtualMemory    (20 bytes of parameters)
  2144.  08Ah    RegisterThreadTerminatePort    (4 bytes of parameters)
  2145.  08Bh    ReleaseMutant        (8 bytes of parameters)
  2146.  08Ch    ReleaseSemaphore    (12 bytes of parameters)
  2147.  08Dh    RemoveIoCompletion    (20 bytes of parameters)
  2148.  08Eh    ReplaceKey        (12 bytes of parameters)
  2149.  08Fh    ReplyPort        (8 bytes of parameters)
  2150.  090h    ReplyWaitReceivePort    (16 bytes of parameters)
  2151.  091h    ReplyWaitReplyPort    (8 bytes of parameters)
  2152.  092h    RequestPort        (8 bytes of parameters)
  2153.  093h    RequestWaitReplyPort    (12 bytes of parameters)
  2154.  094h    ResetEvent        (8 bytes of parameters)
  2155.  095h    RestoreKey        (12 bytes of parameters)
  2156.  096h    ResumeThread        (8 bytes of parameters)
  2157.  097h    SaveKey    (8 bytes of parameters)
  2158.  098h    SetIoCompletion        (20 bytes of parameters)
  2159.  099h    SetContextThread    (8 bytes of parameters)
  2160.  09Ah    SetDefaultHardErrorPort    (4 bytes of parameters)
  2161.  09Bh    SetDefaultLocale    (8 bytes of parameters)
  2162.  09Ch    SetEaFile        (16 bytes of parameters)
  2163.  09Dh    SetEvent        (8 bytes of parameters)
  2164.  09Eh    SetHighEventPair    (4 bytes of parameters)
  2165.  09Fh    SetHighWaitLowEventPair    (4 bytes of parameters)
  2166.  0A0h    ???            (??? bytes of parameters)
  2167.  0A1h    SetInformationFile    (20 bytes of parameters)
  2168.  0A2h    SetInformationKey    (16 bytes of parameters)
  2169.  0A3h    SetInformationObject    (16 bytes of parameters)
  2170.  0A4h    SetInformationProcess    (16 bytes of parameters)
  2171.  0A5h    SetInformationThread    (16 bytes of parameters)
  2172.  0A6h    SetInformationToken    (16 bytes of parameters)
  2173.  0A7h    SetIntervalProfile    (8 bytes of parameters)
  2174.  0A8h    SetLdtEntries        (24 bytes of parameters)
  2175.  0A9h    SetLowEventPair        (4 bytes of parameters)
  2176.  0AAh    SetLowWaitHighEventPair    (4 bytes of parameters)
  2177.  0ABh    ???            (??? bytes of parameters)
  2178.  0ACh    SetSecurityObject    (12 bytes of parameters)
  2179.  0ADh    SetSystemEnvironmentValue    (8 bytes of parameters)
  2180.  0AEh    SetSystemInformation    (12 bytes of parameters)
  2181.  0AFh    SetSystemPowerState    (12 bytes of parameters)
  2182.  0B0h    SetSystemTime        (8 bytes of parameters)
  2183.  0B1h    SetTimer        (28 bytes of parameters)
  2184.  0B2h    SetTimerResolution    (12 bytes of parameters)
  2185.  0B3h    SetValueKey        (24 bytes of parameters)
  2186.  0B4h    SetVolumeInformationFile    (20 bytes of parameters)
  2187.  0B5h    ShutdownSystem        (4 bytes of parameters)
  2188.  0B6h    SignalAndWaitForSingleObject    (16 bytes of parameters)
  2189.  0B7h    StartProfile        (4 bytes of parameters)
  2190.  0B8h    StopProfile        (4 bytes of parameters)
  2191.  0B9h    SuspendThread        (8 bytes of parameters)
  2192.  0BAh    SystemDebugControl    (24 bytes of parameters)
  2193.  0BBh    TerminateProcess    (8 bytes of parameters)
  2194.  0BCh    TerminateThread        (8 bytes of parameters)
  2195.  0BDh    TestAlert        (no parameters)
  2196.  0BEh    UnloadDriver        (4 bytes of parameters)
  2197.  0BFh    UnloadKey        (4 bytes of parameters)
  2198.  0C0h    UnlockFile        (20 bytes of parameters)
  2199.  0C1h    UnlockVirtualMemory    (16 bytes of parameters)
  2200.  0C2h    UnmapViewOfSection    (8 bytes of parameters)
  2201.  0C3h    VdmControl        (8 bytes of parameters)
  2202.  0C4h    WaitForMultipleObjects    (20 bytes of parameters)
  2203.  0C5h    WaitForSingleObject    (12 bytes of parameters)
  2204.  0C6h    WaitHighEventPair    (4 bytes of parameters)
  2205.  0C7h    WaitLowEventPair    (4 bytes of parameters)
  2206.  0C8h    WriteFile        (36 bytes of parameters)
  2207.  0C9h    WriteFileGather        (36 bytes of parameters)
  2208.  0CAh    WriteRequestData    (24 bytes of parameters)
  2209.  0CBh    WriteVirtualMemory    (20 bytes of parameters)
  2210.  0CCh    W32Call            (20 bytes of parameters)
  2211.  0CDh    CreateChannel        (8 bytes of parameters)
  2212.  0CEh    ListenChannel        (8 bytes of parameters)
  2213.  0CFh    OpenChannel        (8 bytes of parameters)
  2214.  0D0h    ReplyWaitSendChannel    (12 bytes of parameters)
  2215.  0D1h    SendWaitReplyChannel    (16 bytes of parameters)
  2216.  0D2h    SetContextChannel    (4 bytes of parameters)
  2217.  0D3h    YieldExecution        (no parameters)
  2218. --------l-2E----BXE22E-----------------------
  2219. INT 2E - 4DOS v2.x-3.03 SHELL2E.COM - UNINSTALL
  2220.     BX = E22Eh
  2221.     DS:SI -> zero byte
  2222. Return: if successful, SHELL2E terminates itself with INT 21/AH=4Ch
  2223. ----------2F---------------------------------
  2224. INT 2F - Multiplex - NOTES
  2225.     AH = identifier of program which is to handle the interrupt
  2226.        00h-7Fh reserved for DOS
  2227.        B8h-BFh reserved for networks
  2228.        C0h-FFh reserved for applications
  2229.     AL is the function code
  2230.    This is a general mechanism for verifying the presence of a TSR and
  2231.    communicating with it.  When searching for a free identifier code for AH
  2232.    using the installation check (AL=00h), the calling program should set
  2233.    BX/CX/DX to 0000h and must not depend on any registers other than CS:IP
  2234.    and SS:SP to be valid on return, since numerous programs now use additional
  2235.    registers on input and/or output for the installation check.
  2236. Notes:    Since the multiplex chain is growing so long, and beginning to
  2237.       experience multiplex number collisions, I have proposed an alternate
  2238.       multiplex interrupt on INT 2D.  If you decide to use the alternate
  2239.       multiplex, please let me know.
  2240.     DOS and some other programs return values in the flags register, so
  2241.       any TSR which chains by calling the previous handler rather than
  2242.       jumping to it should ensure that the returned flags are preserved
  2243.       and passed back to the original caller
  2244. SeeAlso: INT 2D"ALTERNATE MULTIPLEX"
  2245. --------t-2F---------------------------------
  2246. INT 2F - BMB Compuscience Canada Utilities Interface - INSTALLATION CHECK
  2247.     AH = xx (dynamically assigned based upon a search for a multiplex
  2248.          number which doesn't answer installed)
  2249.     AL = 00h installation check
  2250.     ES:DI = EBEBh:BEBEh
  2251. Return: AL = 00h not installed
  2252.          01h not installed, not OK to install
  2253.          FFh installed; if ES:DI was EBEBh:BEBEh on entry, ES:DI will point
  2254.          to a string of the form 'MMMMPPPPPPPPvNNNN' where MMMM is a
  2255.          short form of the manufacturer's name, PPPPPPPP is a product
  2256.          name and NNNN is the product's version number
  2257. --------t-2F---------------------------------
  2258. INT 2F - Ross Wentworth's Turbo Pascal POPUP LIBRARY
  2259.     AH = programmer-selected multiplex number
  2260.     AL = function
  2261.         00h installation check
  2262.         Return: AL = FFh if installed
  2263.         01h get TSR interrupt vectors
  2264.         Return: DX:AX -> vector table (see #02587)
  2265.         02h get TSR code segment
  2266.         Return: AX = code segment for all interrupt handlers
  2267.         03h call user exit routine and release TSR's memory
  2268.         04h get signature string
  2269.         Return: DX:AX -> counted string containing signature
  2270.         05h get TSR's INT 2F handler
  2271.         Return: DX:AX -> INT 2F handler
  2272.         06h enable/disable TSR
  2273.         BL = new state (00h disabled, 01h enabled)
  2274.         07h activate TSR (popup if not disabled)
  2275.         08h get hotkeys
  2276.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  2277.         Return: AX = hotkey (AH = keyflags, AL = scancode)
  2278.         09h set hotkey
  2279.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  2280.         CX = new hotkey (CH = keyflags, CL = scancode)
  2281.         0Ah-1Fh reserved
  2282. Index:    installation check;Ross Wentworth POPUP library
  2283. Index:    hotkeys;Ross Wentworth POPUP library
  2284.  
  2285. Format of POPUP vector table entry:
  2286. Offset    Size    Description    (Table 02587)
  2287.  00h    BYTE    vector number (00h = end of table)
  2288.  01h    DWORD    original vector
  2289.  05h    WORD    offset of interrupt handler in TSR's code segment
  2290. --------t-2F---------------------------------
  2291. INT 2F - CiriSOFT Spanish University of Valladolid TSR's Interface
  2292.     AH = xx (dynamically assigned based upon a search for a multiplex
  2293.          number from C0h to FFh which doesn't answer installed)
  2294.     AL = 00h installation check
  2295.     ES:DI = 1492h:1992h
  2296. Return: AL = 00h not installed
  2297.          01h not installed, not OK to install
  2298.          FFh installed; and if ES:DI was 1492h:1992h on entry, ES:DI will
  2299.            point to author_name_ver table (see #02588)
  2300.     AH = FFh
  2301. Note:    this interface permits advanced communication with TSRs: it is possible
  2302.       to make a generic uninstall utility, advanced TSR relocator programs
  2303.       in order to fit fragmented memory areas, etc.
  2304. See also: INT 2D"AMIS",INT 2F"Compuscience"
  2305. Index:    installation check;CiriSOFT TSR interface
  2306. Index:    uninstall;CiriSOFT TSR interface
  2307.  
  2308. Format of CiriSOFT author_name_ver table:
  2309. Offset    Size    Description    (Table 02588)
  2310.  -16    WORD    segment of the start of the resident TSR code (CS in programs
  2311.           with PSP, XMS upper memory segment if installed as UMB...)
  2312.  -14    WORD    offset of the start of the resident TSR code (frequently 100h
  2313.           in *.COM programs and 0 in upper memory TSR's).
  2314.  -12    WORD    memory used by TSR (in paragraphs). Knowing the memory area
  2315.           used by TSR is possible to determine if hooked vectors are
  2316.           still pointing it (and if it is safe to uninstall).
  2317.  -10    BYTE    characteristics byte (see #02589)
  2318.  -9    BYTE    number of multiplex entry used (redefinition available). Note
  2319.           that the TSR must use THIS variable in it's INT 2Fh handler.
  2320.  -8    WORD    offset to vector_area table (see #02590)
  2321.  -6    WORD    offset to extra_area table (see #02591,#02589 [bit 7])
  2322.  -4   4 BYTEs    signature string "*##*"
  2323.  00h    var    "AUTHOR:PROGRAM_NAME:VERSION",0     (variable length, this area
  2324.           is used in order to determine if the TSR is already resident
  2325.           and it's version code; the ':' char is used as delimiter)
  2326.  
  2327. Bitfields for CiriSOFT characteristics byte:
  2328. Bit(s)    Description    (Table 02589)
  2329.  0-2    type
  2330.     000 normal program (with PSP)
  2331.     001 upper XMS memory block (needed HIMEM.SYS function to free memory
  2332.           when uninstalling)
  2333.     010 device driver (*.SYS)
  2334.     011 device driver in EXE format
  2335.     1xx others (reserved)
  2336.  3-6    reserved
  2337.  7    set if extra_table defined and supported (see #02591)
  2338. SeeAlso: #02588
  2339.  
  2340. Format of CiriSOFT vector_area table:
  2341. Offset    Size    Description    (Table 02590)
  2342.  -1    BYTE    number of vectors intercepted by TSR
  2343.  00h    BYTE    first vector number
  2344.  01h    DWORD    first vector pointer before installing the TSR
  2345.  05h    BYTE    second vector number
  2346.  06h    DWORD    second vector pointer before installing the TSR
  2347.  0Ah    ...    (and so on)
  2348. Note:    the TSR must use these variables to invoke the previous interrupt
  2349.       handler routines
  2350. SeeAlso: #02588
  2351.  
  2352. Format of extra_area table (needed only to improve relocation feature):
  2353. Offset    Size    Description    (Table 02591)
  2354.  00h    WORD    offset to external_ctrl table (see #02592)
  2355.         0000h if not supported
  2356.  02h    WORD    reserved for future use (0)
  2357. SeeAlso: #02588
  2358.  
  2359. Format of CiriSOFT external_ctrl table:
  2360. Offset    Size    Description    (Table 02592)
  2361.  00h    BYTE    bit 0: TSR is relocatable (no absolute segment references)
  2362.  01h    WORD    offset to a variable which can activate/inhibit the TSR
  2363.  ---And if bit 0 in offset 00h is off:
  2364.  03h    DWORD    pointer to ASCIZ pathname for executable file which supports
  2365.           /SR parameter (silent installation & inhibit)
  2366.  07h    DWORD    pointer to first variable to initialize on the copy reloaded
  2367.           from the previous TSR still resident
  2368.  0Bh    DWORD    pointer to last variable (all variables packed in one block)
  2369. --------c-2F00-------------------------------
  2370. INT 2F U - DOS 2.x only PRINT.COM - SUBMIT FILE FOR PRINTING
  2371.     AH = 00h
  2372.     DS:DX -> opened FCB (see #01345 at INT 21/AX=0Fh)
  2373. Return: AH = number of files currently in print queue
  2374.     AL = status
  2375.         00h file successfully added
  2376.         01h queue is full
  2377.     ES:BX -> print queue (10 FCBs; first byte of FFh indicates unused)
  2378.     ES:DX -> currently-printing FCB (if DX=FFFFh, none printing)
  2379. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  2380.     values in AH other than 00h or 01h cause PRINT to return the number of
  2381.       files in the queue in AH
  2382. SeeAlso: AH=01h"PRINT",AX=0102h
  2383. --------P-2F00-------------------------------
  2384. INT 2F U - PSPRINT - PRINT JOB CONTROL
  2385.     AH = 00h
  2386.     ???
  2387. Return: ???
  2388. --------c-2F0080-----------------------------
  2389. INT 2F - DOS 3.1+ PRINT - GIVE PRINT A TIME SLICE
  2390.     AX = 0080h
  2391. Return: after PRINT executes
  2392. Notes:    PRINT returns AL=01h if AH=00h but AL is not 80h on entry
  2393.     this function is not supported by the Novell DOS 7 PRINT.COM
  2394. --------N-2F00D8-----------------------------
  2395. INT 2F - Personal NetWare - VLM - ???
  2396.     AX = 00D8h
  2397.     ???
  2398. Return: ???
  2399. Note:    hooked by one of the .VLMs loaded by VLM.EXE v1.10, but apparently a
  2400.       NOP
  2401. --------c-2F01-------------------------------
  2402. INT 2F U - DOS 2.x only PRINT.COM - REMOVE FILE FROM PRINT QUEUE
  2403.     AH = 01h
  2404.     DS:DX -> FCB (see #01345 at INT 21/AH=0Fh) for file to be canceled
  2405. Return: AH = number of files currently in print queue
  2406.     AL = 00h (successful)
  2407.     ES:BX -> print queue (10 FCBs; first byte of FFh indicates unused)
  2408.     ES:DX -> currently-printing FCB (if DX=FFFFh, none printing)
  2409. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  2410.     values in AH other than 00h or 01h cause PRINT to return the number of
  2411.       files in the queue in AH
  2412. SeeAlso: AH=00h"PRINT.COM",AX=0103h
  2413. --------c-2F0100-----------------------------
  2414. INT 2F - DOS 3.0+ PRINT - INSTALLATION CHECK
  2415.     AX = 0100h
  2416. Return: AL = status
  2417.         00h not installed
  2418.         01h not installed, but not OK to install
  2419.         FFh installed
  2420.         AH = 00h (Novell DOS 7)
  2421. SeeAlso: AX=0101h
  2422. --------c-2F0100SI20D6-----------------------
  2423. INT 2F U - PrintCache 3.1 PRINT.COM - INSTALLATION CHECK
  2424.     AX = 0100h
  2425.     SI = 20D6h
  2426.     DI = 8761h
  2427. Return: AX = 00FFh if installed
  2428.     DI = 0001h if PrintCache's PRINT.COM installed and magic values match
  2429.         SI = resident code segment
  2430. Program: PrintCache PRINT.COM is a DOS PRINT replacement included in
  2431.       LaserTools' PrintCache memory/disk-based print spooler package
  2432. Note:    if either of SI or DI differ from the indicated magic values, only AX
  2433.       will be modified on return, for compatibility with DOS PRINT
  2434. SeeAlso: AX=0101h/SI=20D6h,AX=C000h"PCACHE"
  2435. --------c-2F0101-----------------------------
  2436. INT 2F - DOS 3.0+ PRINT - SUBMIT FILE FOR PRINTING
  2437.     AX = 0101h
  2438.     DS:DX -> submit packet (see #02593)
  2439. Return: CF clear if successful
  2440.         AL = status
  2441.         01h added to queue
  2442.         9Eh now printing
  2443.     CF set on error
  2444.         AX = error code (see #02594,#01680 at INT 21/AH=59h/BX=0000h)
  2445. SeeAlso: AX=0102h
  2446.  
  2447. Format of PRINT submit packet:
  2448. Offset    Size    Description    (Table 02593)
  2449.  00h    BYTE    level (must be 00h)
  2450.  01h    DWORD    pointer to ASCIZ filename (no wildcards)
  2451.  
  2452. (Table 02594)
  2453. Values for PRINT error code:
  2454.  0001h    invalid function
  2455.  0002h    file not found
  2456.  0003h    path not found
  2457.  0004h    out of file handles
  2458.  0005h    access denied
  2459.  0008h    print queue full
  2460.  0009h    spooler busy
  2461.  000Ch    name too long
  2462.  000Fh    invalid drive
  2463. --------c-2F0101SI20D6-----------------------
  2464. INT 2F U - PrintCache v3.1 PRINT.COM - SUBMIT FILE FOR PRINTING
  2465.     AX = 0101h
  2466.     SI = 20D6h
  2467.     DI = 8761h
  2468.     DS:DX -> submit packet (see #02593)
  2469.     CL = print options
  2470.         bit 4: use default options
  2471. Return: CF clear if successful
  2472.         AL = status
  2473.         01h added to queue
  2474.         9Eh now printing
  2475.     CF set on error
  2476.         AX = error code (see #02594)
  2477. Program: PrintCache PRINT.COM is a DOS PRINT replacement included in
  2478.       LaserTools' PrintCache memory/disk-based print spooler package
  2479. Note:    if either SI or DI differs from the indicated magic values on entry,
  2480.       PrintCache will use the default print options for the file for
  2481.       compatibility with DOS PRINT
  2482. SeeAlso: AX=0100h/SI=20D6h,AX=0101h,AH=00h"PRINT",AX=0107h"PrintCache"
  2483. --------c-2F0102-----------------------------
  2484. INT 2F - DOS 3.0+ PRINT - REMOVE FILE FROM PRINT QUEUE
  2485.     AX = 0102h
  2486.     DS:DX -> ASCIZ filename (wildcards allowed)
  2487. Return: CF clear if successful
  2488.     CF set on error
  2489.         AX = error code (see #02594)
  2490. SeeAlso: AX=0101h,AX=0103h,AH=01h"PRINT"
  2491. --------c-2F0103-----------------------------
  2492. INT 2F - DOS 3.0+ PRINT - CANCEL ALL FILES IN PRINT QUEUE
  2493.     AX = 0103h
  2494. Return: CF clear if successful
  2495.     CF set on error
  2496.         AX = error code (see #02594)
  2497. SeeAlso: AX=0102h
  2498. --------c-2F0104-----------------------------
  2499. INT 2F - DOS 3.0+ PRINT - FREEZE PRINT QUEUE TO READ JOB STATUS
  2500.     AX = 0104h
  2501. Return: CF clear if successful
  2502.         DX = error count since status last read
  2503.         DS:SI -> print queue
  2504.     CF set on error
  2505.         AX = error code (see #02594)
  2506. Desc:    get the list of print jobs, temporarily suspending PRINT's activities
  2507.       to avoid changing the list while it is being examined
  2508. Notes:    the print queue is an array of 64-byte ASCIZ filenames terminated by
  2509.       an empty filename; the first name is the file currently being printed
  2510.     printing is stopped until AX=0105h is called to prevent the queue
  2511.       from changing while the filenames are being read
  2512. SeeAlso: AX=0101h,AX=0105h
  2513. --------c-2F0105-----------------------------
  2514. INT 2F - DOS 3.0+ PRINT - RESTART PRINT QUEUE AFTER STATUS READ
  2515.     AX = 0105h
  2516. Return: CF clear if successful
  2517.     CF set on error
  2518.         AX = error code (see #02594)
  2519. Desc:    restart PRINT's activities once an application finishes examining the
  2520.       print queue
  2521. SeeAlso: AX=0104h
  2522. --------c-2F0106-----------------------------
  2523. INT 2F - DOS 3.3+ PRINT - GET PRINTER DEVICE
  2524.     AX = 0106h
  2525. Return: CF set if files in print queue
  2526.         AX = error code 0008h (queue full)
  2527.         DS:SI -> device driver header (see #01646)
  2528.     CF clear if print queue empty
  2529.         AX = 0000h
  2530. Desc:    determine which device, if any, PRINT is currently using for output
  2531. Notes:    undocumented prior to the release of MS-DOS 5.0
  2532.     this function can be used to allow a program to avoid printing to the
  2533.       printer on which PRINT is currently performing output
  2534. SeeAlso: AX=0104h
  2535. --------c-2F0107-----------------------------
  2536. INT 2F U - PrintCache v3.1 PRINT.COM - SET TRAILING FORM FEEDS
  2537.     AX = 0107h
  2538.     CL bit 0: output form feed between print jobs
  2539. Return: AL destroyed
  2540. SeeAlso: AX=0100h/SI=20D6h,AX=0101h/SI=20D6h
  2541. --------N-2F0200-----------------------------
  2542. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALLATION CHECK
  2543.     AX = 0200h
  2544. Return: AL = FFh if installed
  2545. Desc:    determine whether the PC LAN Program redirector is installed
  2546. SeeAlso: AX=0201h,AX=0203h
  2547. --------N-2F0201-----------------------------
  2548. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2549.     AX = 0201h
  2550. Return: nothing???
  2551. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  2552.     AX=0202h appears to be the opposite function
  2553.     these functions are supposedly used to signal opening and closing of
  2554.       printers
  2555. SeeAlso: AX=0202h
  2556. --------N-2F0202-----------------------------
  2557. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2558.     AX = 0202h
  2559.     ???
  2560. Return: nothing???
  2561. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  2562.     these functions are supposedly used to signal opening and closing of
  2563.       printers
  2564. SeeAlso: AX=0201h
  2565. --------N-2F0203-----------------------------
  2566. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2567.     AX = 0203h
  2568. Return: nothing???
  2569. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  2570.     AX=0204h appears to be the opposite function
  2571.     these functions are supposedly used to signal opening and closing of
  2572.       printers
  2573. SeeAlso: AX=0200h,AX=0204h
  2574. --------N-2F0204-----------------------------
  2575. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2576.     AX = 0204h
  2577.     ???
  2578. Return: nothing???
  2579. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  2580.     AX=0203h appears to be the opposite function
  2581.     these functions are supposedly used to signal opening and closing of
  2582.       printers
  2583. SeeAlso: AX=0200h,AX=0203h
  2584. --------N-2F---------------------------------
  2585. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2586.     AX = 02xxh
  2587.     ???
  2588. Return: ???
  2589. --------l-2F0500-----------------------------
  2590. INT 2F U - DOS 3.0+ CRITICAL ERROR HANDLER - INSTALLATION CHECK
  2591.     AX = 0500h
  2592. Return: AL = status
  2593.         00h not installed, OK to install
  2594.         01h not installed, can't install
  2595.         FFh installed
  2596.     BX destroyed (MSCDEX v2.21-2.25)
  2597.     CF clear (MSCDEX v2.21-2.25)
  2598. Desc:    determine whether a critical error message override is installed
  2599. Note:    this set of functions allows a user program to partially or completely
  2600.       override the default critical error handler's message in COMMAND.COM
  2601. SeeAlso: AH=05h,INT 24
  2602. --------l-2F05-------------------------------
  2603. INT 2F CU - DOS 3.0+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING
  2604.     AH = 05h
  2605. ---DOS 3.x---
  2606.     AL = extended error code (not zero)
  2607. ---DOS 4.0+ ---
  2608.     AL = error type
  2609.         01h DOS extended error code
  2610.         02h parameter error
  2611.     BX = error code
  2612. Return: CF clear if successful
  2613.         ES:DI -> ASCIZ error message (read-only)
  2614.         AL = completion state
  2615.         00h message requires completion with device name, drive, etc.
  2616.         01h message is complete as returned
  2617.     CF set if error code can't be converted to string
  2618.         AX,DI,ES destroyed
  2619.     other flags corrupted
  2620. Notes:    called at start of COMMAND.COM's default critical error handler if
  2621.       installed by a user program, allowing partial or complete overriding
  2622.       of the default error messages
  2623.     subfunction 02h is called by many DOS 4 external programs
  2624.     DR DOS's COMMAND.COM appends additional info ("0 files copied") to the
  2625.       returned string
  2626. SeeAlso: AX=0500h,AX=122Eh,INT 24
  2627. --------U-2F0600-----------------------------
  2628. INT 2F - DOS 3.0+ ASSIGN - INSTALLATION CHECK
  2629.     AX = 0600h
  2630. Return: AL = status
  2631.         00h not installed
  2632.         01h not installed, but not OK to install
  2633.         FFh installed
  2634. Notes:    ASSIGN is not a TSR in DR DOS 5.0; it is internally replaced by SUBST
  2635.       (see INT 21/AH=52h)
  2636.     undocumented prior to the release of DOS 5.0
  2637. SeeAlso: AX=0601h,INT 21/AH=52h
  2638. --------U-2F0601-----------------------------
  2639. INT 2F U - DOS 3.0+ ASSIGN - GET DRIVE ASSIGNMENT TABLE
  2640.     AX = 0601h
  2641. Return: ES = segment of ASSIGN work area and assignment table
  2642. Note:    the 26 bytes starting at ES:0103h specify which drive each of A: to Z:
  2643.       is mapped to.     Initially set to 01h 02h 03h....
  2644. SeeAlso: AX=0600h,AX=AF14h"WinDOS"
  2645. --------D-2F0800-----------------------------
  2646. INT 2F U - DRIVER.SYS support - INSTALLATION CHECK
  2647.     AX = 0800h
  2648. Return: AL = status
  2649.         00h not installed, OK to install
  2650.         01h not installed, not OK to install
  2651.         FFh installed
  2652. Desc:    determine whether the internal support code used by DRIVER.SYS is
  2653.       present; it is always present in DOS 3.2+
  2654. Note:    supported by DR DOS 5.0 and Novell DOS 7
  2655. --------D-2F0801-----------------------------
  2656. INT 2F U - DRIVER.SYS support - ADD NEW BLOCK DEVICE
  2657.     AX = 0801h
  2658.     DS:DI -> drive data table (see #02601,#02602,#02603)
  2659. Return: AX,BX,SI,ES destroyed
  2660. Notes:    moves down internal list of drive data tables, copying and modifying
  2661.       the drive description flags word for tables referencing same physical
  2662.       drive
  2663.     the data table is appended to the chain of tables
  2664.     supported by DR DOS 5.0 and Novell DOS 7
  2665. SeeAlso: AX=0803h
  2666. --------D-2F0802-----------------------------
  2667. INT 2F U - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST
  2668.     AX = 0802h
  2669.     ES:BX -> device driver request header (see #02597)
  2670. Return: request header updated as per requested operation
  2671.     STACK:    WORD    original flags from INT call (left by RETF in device
  2672.               driver, at least in DOS 5.0-6.22)
  2673. Notes:    supported by DR DOS 5.0
  2674.     DOS 3.2 executes this function on any AL value from 02h through F7h;
  2675.       DOS 4.0+ executes this function on AL=02h and AL=04h-F7h
  2676.     the command codes (see #02595) and structures described below apply
  2677.       to all drivers which support the appropriate commands; this call is
  2678.       just one of a number of ways in which a device driver request may
  2679.       be invoked
  2680.     supported by Novell DOS 7
  2681. SeeAlso: AX=0800h,AX=0801h,AX=0803h,AX=1510h,INT 21/AH=52h,INT 21/AH=99h
  2682. SeeAlso: INT 21/AH=9Ah
  2683.  
  2684. (Table 02595)
  2685. Values for device driver command code:
  2686.  00h (0)  INIT
  2687.  01h (1)  MEDIA CHECK (block devices)
  2688.  02h (2)  BUILD BPB (block devices)
  2689.  03h (3)  IOCTL INPUT
  2690.  04h (4)  INPUT
  2691.  05h (5)  NONDESTRUCTIVE INPUT, NO WAIT (character devices)
  2692.  06h (6)  INPUT STATUS (character devices)
  2693.  07h (7)  INPUT FLUSH (character devices)
  2694.  08h (8)  OUTPUT
  2695.  09h (9)  OUTPUT WITH VERIFY
  2696.  0Ah (10) OUTPUT STATUS (character devices)
  2697.  0Bh (11) OUTPUT FLUSH (character devices)
  2698.  0Ch (12) IOCTL OUTPUT
  2699.  0Dh (13) (DOS 3.0+) DEVICE OPEN
  2700.  0Eh (14) (DOS 3.0+) DEVICE CLOSE
  2701.  0Fh (15) (DOS 3.0+) REMOVABLE MEDIA (block devices)
  2702.  10h (16) (DOS 3.0+) OUTPUT UNTIL BUSY (character devices)
  2703.  11h (17) (European MS-DOS 4.0) STOP OUTPUT (console screen drivers only)
  2704.  12h (18) (European MS-DOS 4.0) RESTART OUTPUT (console screen drivers only)
  2705.  13h (19) (DOS 3.2+) GENERIC IOCTL
  2706.  14h (20) unused
  2707.  15h (21) (European MS-DOS 4.0) RESET UNCERTAIN MEDIA FLAG
  2708.  16h (22) unused
  2709.  17h (23) (DOS 3.2+) GET LOGICAL DEVICE
  2710.  18h (24) (DOS 3.2+) SET LOGICAL DEVICE
  2711.  19h (25) (DOS 5.0+) CHECK GENERIC IOCTL SUPPORT
  2712.  80h (128)(CD-ROM) READ LONG
  2713.  81h (129)(CD-ROM) reserved
  2714.  82h (130)(CD-ROM) READ LONG PREFETCH
  2715.  83h (131)(CD-ROM) SEEK
  2716.  84h (132)(CD-ROM) PLAY AUDIO
  2717.  85h (133)(CD-ROM) STOP AUDIO
  2718.  86h (134)(CD-ROM) WRITE LONG
  2719.  87h (135)(CD-ROM) WRITE LONG VERIFY
  2720.  88h (136)(CD-ROM) RESUME AUDIO
  2721.  
  2722. Bitfields for device request status:
  2723. Bit(s)    Description    (Table 02596)
  2724.  15    error
  2725.  14-11    reserved
  2726.  10    ??? set by DOS kernel on entry to some driver calls
  2727.  9    busy
  2728.  8    done (may be clear on return under European MS-DOS 4.0)
  2729.  7-0    error code if bit 15 set (see #02598)
  2730.  
  2731. Format of device driver request header:
  2732. Offset    Size    Description    (Table 02597)
  2733.  00h    BYTE    length of request header
  2734.  01h    BYTE    subunit within device driver
  2735.  02h    BYTE    command code (see #02595)
  2736.  03h    WORD    status (filled in by device driver) (see #02596)
  2737. ---DOS---
  2738.  05h  4 BYTEs    reserved (unused in DOS 2.x and 3.x)
  2739.  09h    DWORD    (European MS-DOS 4.0 only) pointer to next request header in
  2740.               device's request queue
  2741.         (other versions) reserved (unused in DOS 2.x and 3.x)
  2742. ---STARLITE architecture---
  2743.  05h    DWORD    pointer to next request header
  2744.  09h  4 BYTEs    reserved
  2745. ---command code 00h---
  2746.  0Dh    BYTE    (ret) number of units
  2747.  0Eh    DWORD    (call) pointer to DOS device helper function (see #02599)
  2748.               (European MS-DOS 4.0 only)
  2749.         (call) pointer past end of memory available to driver (DOS 5+)
  2750.         (ret) address of first free byte following driver
  2751.  12h    DWORD    (call) pointer to commandline arguments
  2752.         (ret) pointer to BPB array (block drivers) or
  2753.               0000h:0000h (character drivers)
  2754.  16h    BYTE    (DOS 3.0+) drive number for first unit of block driver (0=A)
  2755.    ---European MS-DOS 4.0---
  2756.  17h    DWORD    pointer to function to save registers on stack
  2757.    ---DOS 5+ ---
  2758.  17h    WORD    (ret) error-message flag
  2759.         0001h MS-DOS should display error msg on init failure
  2760. ---command code 01h---
  2761.  0Dh    BYTE    media descriptor
  2762.  0Eh    BYTE    (ret) media status
  2763.         00h don't know
  2764.         01h media has not changed
  2765.         FFh media has been changed
  2766.  0Fh    DWORD    (ret, DOS 3.0+) pointer to previous volume ID if the
  2767.           OPEN/CLOSE/RM bit in device header is set and disk changed
  2768. ---command code 02h---
  2769.  0Dh    BYTE    media descriptor
  2770.  0Eh    DWORD    transfer address
  2771.         -> scratch sector if NON-IBM FORMAT bit in device header set
  2772.         -> first FAT sector otherwise
  2773.  12h    DWORD    pointer to BPB (set by driver) (see #01663 at INT 21/AH=53h)
  2774. ---command codes 03h,0Ch---
  2775.           (see also INT 21/AX=4402h"DOS 2+",INT 21/AX=4403h"DOS")
  2776.  0Dh    BYTE    media descriptor (block devices only)
  2777.  0Eh    DWORD    transfer address
  2778.  12h    WORD    (call) number of bytes to read/write
  2779.         (ret) actual number of bytes read or written
  2780. ---command codes 04h,08h,09h (except Compaq DOS 3.31, DR DOS 6)---
  2781.  0Dh    BYTE    media descriptor (block devices only)
  2782.  0Eh    DWORD    transfer address
  2783.  12h    WORD    byte count (character devices) or sector count (block devices)
  2784.  14h    WORD    starting sector number (block devices only)
  2785.  16h    DWORD    (DOS 3.0+) pointer to volume ID if error 0Fh returned
  2786.  1Ah    DWORD    (DOS 4.0+) 32-bit starting sector number (block devices with
  2787.           device attribute word bit 1 set only) if starting sector
  2788.           number above is FFFFh (see INT 21/AH=52h)
  2789. ---command codes 04h,08h,09h (Compaq DOS 3.31, DR DOS 6)---
  2790.  0Dh    BYTE    media descriptor (block devices only)
  2791.  0Eh    DWORD    transfer address
  2792.  12h    WORD    byte count (character devices) or sector count (block devices)
  2793.  14h    DWORD    32-bit starting sector number (block devices only)
  2794.     Note:    to reliably determine which variant of the request block for
  2795.           functions 04h,08h,09h has been passed to the driver, check
  2796.           the length field as well as the word at offset 14h.  If the
  2797.           length is 1Eh and 14h=FFFFh, use the DWORD at 1Ah as the
  2798.           starting sector number; if the length is 18h, use the DWORD
  2799.           at 14h; otherwise, use the WORD at 14h.
  2800. ---command code 05h---
  2801.  0Dh    BYTE    byte read from device if BUSY bit clear on return
  2802. ---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh---
  2803.  no further fields
  2804. ---command code 10h---
  2805.  0Dh    BYTE    unused
  2806.  0Eh    DWORD    transfer address
  2807.  12h    WORD    (call) number of bytes to write
  2808.         (ret) actual number of bytes written
  2809. ---command codes 11h,12h---
  2810.  0Dh    BYTE    reserved
  2811. ---command code 15h---
  2812.  no further fields
  2813. ---command codes 13h,19h---
  2814.  0Dh    BYTE    category code
  2815.         00h unknown
  2816.         01h COMn:
  2817.         03h CON
  2818.         05h LPTn:
  2819.         07h mouse (European MS-DOS 4.0)
  2820.         08h disk
  2821.         9Eh (STARLITE) Media Access Control driver
  2822.  0Eh    BYTE    function code
  2823.         00h (STARLITE) MAC Bind request
  2824.  0Fh    WORD    copy of DS at time of IOCTL call (apparently unused in DOS 3.3)
  2825.         SI contents (European MS-DOS 4.0)
  2826.  11h    WORD    offset of device driver header (see #01646)
  2827.         DI contents (European MS-DOS 4.0)
  2828.  13h    DWORD    pointer to parameter block from INT 21/AX=440Ch or AX=440Dh
  2829. ---command codes 80h,82h---
  2830.  0Dh    BYTE    addressing mode
  2831.         00h HSG (default)
  2832.         01h Phillips/Sony Red Book
  2833.  0Eh    DWORD    transfer address (ignored for command 82h)
  2834.  12h    WORD    number of sectors to read
  2835.         (if 0 for command 82h, request is an advisory seek)
  2836.  14h    DWORD    starting sector number
  2837.         logical sector number in HSG mode
  2838.         frame/second/minute/unused in Red Book mode
  2839.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  2840.  18h    BYTE    data read mode
  2841.         00h cooked (2048 bytes per frame)
  2842.         01h raw (2352 bytes per frame, including EDC/ECC)
  2843.  19h    BYTE    interleave size (number of sectors stored consecutively)
  2844.  1Ah    BYTE    interleave skip factor
  2845.         (number of sectors between consecutive portions)
  2846. ---command code 83h---
  2847.  0Dh    BYTE    addressing mode
  2848.         00h HSG (default)
  2849.         01h Phillips/Sony Red Book
  2850.  0Eh    DWORD    transfer address (ignored)
  2851.  12h    WORD    number of sectors to read (ignored)
  2852.  14h    DWORD    starting sector number (see also above)
  2853. ---command code 84h---
  2854.  0Dh    BYTE    addressing mode
  2855.         00h HSG (default)
  2856.         01h Phillips/Sony Red Book
  2857.  0Eh    DWORD    starting sector number (see also above)
  2858.  12h    DWORD    number of sectors to play
  2859. ---command codes 85h,88h---
  2860.  no further fields
  2861. ---command codes 86h,87h---
  2862.  0Dh    BYTE    addressing mode
  2863.         00h HSG (default)
  2864.         01h Phillips/Sony Red Book
  2865.  0Eh    DWORD    transfer address (ignored in write mode 0)
  2866.  12h    WORD    number of sectors to write
  2867.  14h    DWORD    starting sector number (also see above)
  2868.  18h    BYTE    write mode
  2869.         00h mode 0 (write all zeros)
  2870.         01h mode 1 (default) (2048 bytes per sector)
  2871.         02h mode 2 form 1 (2048 bytes per sector)
  2872.         03h mode 2 form 2 (2336 bytes per sector)
  2873.  19h    BYTE    interleave size (number of sectors stored consecutively)
  2874.  1Ah    BYTE    interleave skip factor
  2875.         (number of sectors between consecutive portions)
  2876.  
  2877. (Table 02598)
  2878. Values for device driver error code:
  2879.  00h    write-protect violation
  2880.  01h    unknown unit
  2881.  02h    drive not ready
  2882.  03h    unknown command
  2883.  04h    CRC error
  2884.  05h    bad drive request structure length
  2885.  06h    seek error
  2886.  07h    unknown media
  2887.  08h    sector not found
  2888.  09h    printer out of paper
  2889.  0Ah    write fault
  2890.  0Bh    read fault
  2891.  0Ch    general failure
  2892.  0Dh    reserved
  2893.  0Eh    (CD-ROM) media unavailable
  2894.  0Fh    invalid disk change
  2895.  
  2896. (Table 02599)
  2897. Call European MS-DOS 4.0 device helper function with:
  2898.     DL = function
  2899.         00h "SchedClock" called on each timer tick
  2900.         AL = tick interval in milliseconds
  2901.         01h "DevDone" device I/O complete
  2902.         ES:BX -> request header
  2903.         Note:    must update status word first; may be called from
  2904.               an interrupt handler
  2905.         02h "PullRequest" pull next request from queue
  2906.         DS:SI -> DWORD pointer to start of device's request queue
  2907.         Return: ZF clear if pending request
  2908.                 ES:BX -> request header
  2909.             ZF set if no more requests
  2910.         03h "PullParticular" remove specific request from queue
  2911.         DS:SI -> DWORD pointer to start of device's request queue
  2912.         ES:BX -> request header
  2913.         Return: ZF set if request header not found
  2914.         04h "PushRequest" push the request onto the queue
  2915.         DS:SI -> DWORD pointer to start of device's request queue
  2916.         ES:BX -> request header
  2917.         interrupts disabled
  2918.         05h "ConsInputFilter" keyboard input check
  2919.         AX = character (high byte 00h if PC ASCII character)
  2920.         Return: ZF set if character should be discarded
  2921.             ZF clear if character should be handled normally
  2922.         Note:    called by keyboard interrupt handler so DOS can scan
  2923.               for special input characters
  2924.         06h "SortRequest" push request in sorted order by starting sector
  2925.         DS:SI -> DWORD pointer to start of device's request queue
  2926.         ES:BX -> request header
  2927.         interrupts disabled
  2928.         07h "SigEvent" send signal on keyboard event
  2929.         AH = event identifier
  2930.         Return: AL,FLAGS destroyed
  2931.         09h "ProcBlock" block on event
  2932.         AX:BX = event identifier (typically a pointer)
  2933.         CX = timeout in ms or 0000h for never
  2934.         DH = interruptable flag (nonzero if pause may be interrupted)
  2935.         interrupts disabled
  2936.         Return: after corresponding ProcRun call
  2937.             CF clear if event wakeup, set if unusual wakeup
  2938.             ZF set if timeout wakeup, clear if interrupted
  2939.             AL = wakeup code, nonzero if unusual wakeup
  2940.             interrupts enabled
  2941.             BX,CX,DX destroyed
  2942.         Note:    block process and schedules another to run
  2943.         0Ah "ProcRun" unblock process
  2944.         AX:BX = event identifier (typically a pointer)
  2945.         Return: AX = number of processes awakened
  2946.             ZF set if no processes awakened
  2947.             BX,CX,DX destroyed
  2948.         0Bh "QueueInit" initialize/clear character queue
  2949.         DS:BX -> character queue structure (see #02600)
  2950.         Note:    the queue size field must be set before calling
  2951.         0Dh "QueueWrite" put a character in the queue
  2952.         DS:BX -> character queue (see #02600)
  2953.         AL = character to append to end of queue
  2954.         Return: ZF set if queue is full
  2955.             ZF clear if character stored
  2956.         0Eh "QueueRead" get a character from the queue
  2957.         DS:BX -> character queue (see #02600)
  2958.         Return: ZF set if queue is empty
  2959.             ZF clear if characters in queue
  2960.                 AL = first character in queue
  2961.         10h "GetDOSVar" return pointer to DOS variable
  2962.         AL = index of variable
  2963.             03h current process ID
  2964.         BX = index into variable if AL specifies an array
  2965.         CX = expected length of variable
  2966.         Return: CF clear if successful
  2967.                 DX:AX -> variable
  2968.             CF set on error
  2969.                 AX,DX destroyed
  2970.             BX,CX destroyed
  2971.         Note:    the variables may not be modified
  2972.         14h "Yield" yield CPU if higher-priority task ready to run
  2973.         Return: FLAGS destroyed
  2974.         1Bh "CritEnter" begin system critical section
  2975.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  2976.         Return: AX,BX,CX,DX destroyed
  2977.         1Ch "CritLeave" end system critical section
  2978.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  2979.         Return: AX,BX,CX,DX destroyed
  2980.         Note:    must be called in the context of the process which
  2981.               called CritEnter on the semaphore
  2982. Note:    the DWORD pointing at the request queue must be allocated by the driver
  2983.       and initialized to 0000h:0000h.  It always points at the next request
  2984.       to be executed
  2985.  
  2986. Format of European MS-DOS 4.0 character queue:
  2987. Offset    Size    Description    (Table 02600)
  2988.  00h    WORD    size of queue in bytes
  2989.  02h    WORD    index of next character out
  2990.  04h    WORD    count of characters in the queue
  2991.  06h  N BYTEs    queue buffer
  2992. --------D-2F0803-----------------------------
  2993. INT 2F U - DOS 4.0+ DRIVER.SYS support - GET DRIVE DATA TABLE LIST
  2994.     AX = 0803h
  2995. Return: DS:DI -> first drive data table in list (see #02601,#02602,#02603)
  2996. Note:    not available under DR DOS 5.0, but supported by Novell DOS 7 (using
  2997.       the MS-DOS 4+ data table format)
  2998. SeeAlso: AX=0801h
  2999.  
  3000. Format of DOS 3.30 drive data table:
  3001. Offset    Size    Description    (Table 02601)
  3002.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  3003.  04h    BYTE    physical unit number (for INT 13)
  3004.  05h    BYTE    logical drive number (0=A:)
  3005.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  3006.         Offset    Size    Description
  3007.          00h    WORD    bytes per sector
  3008.          02h    BYTE    sectors per cluster, FFh if unknown
  3009.          03h    WORD    number of reserved sectors
  3010.          05h    BYTE    number of FATs
  3011.          06h    WORD    number of root dir entries
  3012.          08h    WORD    total sectors
  3013.          0Ah    BYTE    media descriptor, 00h if unknown
  3014.          0Bh    WORD    sectors per FAT
  3015.          0Dh    WORD    sectors per track
  3016.          0Fh    WORD    number of heads
  3017.          11h    WORD    number of hidden sectors
  3018.  19h    BYTE    flags
  3019.         bit 6: 16-bit FAT instead of 12-bit FAT
  3020.  1Ah    WORD    number of DEVICE OPEN calls without corresponding DEVICE CLOSE
  3021.  1Ch 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  3022.           fixed media)
  3023.  27h    BYTE    terminating null for volume label???
  3024.  28h    BYTE    device type (see #01561 at INT 21/AX=440Dh"DOS 3.2+")
  3025.  29h    WORD    bit flags describing drive (see #02604)
  3026.  2Bh    WORD    number of cylinders
  3027.  2Dh 19 BYTEs    BIOS Parameter Block for highest capacity supported
  3028.  40h  3 BYTEs    ???
  3029.  43h  9 BYTEs    filesystem type???, default = "NO NAME    "
  3030.         (apparently only MS-DOS 3.30 fixed media, nulls for removable
  3031.           media and PC-DOS 3.30)
  3032.  4Ch    BYTE    least-significant byte of last-accessed cylinder number
  3033. ---removable media---
  3034.  4Dh    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  3035. ---fixed media---
  3036.  4Dh    WORD    partition (FFFFh = primary, 0001h = extended)
  3037.  4Fh    WORD    absolute cylinder number of partition's start on physical
  3038.           drive (always FFFFh if primary partition)
  3039. SeeAlso: #02602,#02603
  3040.  
  3041. Format of COMPAQ DOS 3.31 drive data table:
  3042. Offset    Size    Description    (Table 02602)
  3043.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  3044.  04h    BYTE    physical unit number (for INT 13)
  3045.  05h    BYTE    logical drive number (0=A:)
  3046.  06h 25 BYTEs    BIOS Parameter Block (see #02603)
  3047.  1Fh  6 BYTEs    reserved fields from BPB above???
  3048.  25h    BYTE    flags
  3049.         bit 6: 16-bit FAT instead of 12-bit FAT
  3050.         bit 5: large volume???
  3051.  26h    WORD    device-open count???
  3052.  28h 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  3053.           fixed media)
  3054.  33h    BYTE    terminating null for volume label
  3055.  34h    BYTE    device type (see #01561 at INT 21/AX=440Dh"DOS 3.2+")
  3056.  35h    WORD    bit flags describing drive (see #02604)
  3057.  37h    WORD    number of cylinders
  3058.  39h 25 BYTEs    BIOS parameter block for highest capacity drive supports
  3059.  52h  6 BYTEs    ??? apparently always zeros
  3060.  58h    BYTE    least-significant byte of last-accessed cylinder number
  3061. ---removable media---
  3062.  59h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  3063. ---fixed media---
  3064.  59h    WORD    partition (FFFFh = primary, 0001h = extended)
  3065.  5Bh    WORD    absolute cylinder number of partition's start on physical
  3066.           drive (always FFFFh if primary partition)
  3067. SeeAlso: #02601,#02603
  3068.  
  3069. Format of DOS 4.0-7.0 drive data table:
  3070. Offset    Size    Description    (Table 02603)
  3071.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  3072.  04h    BYTE    physical unit number (for INT 13)
  3073.  05h    BYTE    logical drive number (0=A:)
  3074.  06h 25 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  3075.         Offset    Size    Description
  3076.          00h    WORD    bytes per sector
  3077.          02h    BYTE    sectors per cluster, FFh if unknown
  3078.          03h    WORD    number of reserved sectors
  3079.          05h    BYTE    number of FATs
  3080.          06h    WORD    number of root dir entries
  3081.          08h    WORD    total sectors (refer to offset 15h if zero)
  3082.          0Ah    BYTE    media descriptor, 00h if unknown
  3083.          0Bh    WORD    sectors per FAT
  3084.          0Dh    WORD    sectors per track
  3085.          0Fh    WORD    number of heads
  3086.          11h    DWORD    number of hidden sectors
  3087.          15h    DWORD    total sectors if WORD at 08h is zero
  3088.  1Fh    BYTE    flags
  3089.         bit 6: 16-bit FAT instead of 12-bit
  3090.         bit 7: unsupportable disk (all accesses will return Not Ready)
  3091.  20h    WORD    device-open count
  3092.  22h    BYTE    device type (see #01561 at INT 21/AX=440Dh"DOS 3.2+")
  3093.  23h    WORD    bit flags describing drive (see #02604)
  3094.  25h    WORD    number of cylinders (for partition only, if hard disk)
  3095.  27h 25 BYTEs    BIOS Parameter Block for default (highest) capacity supported
  3096.  40h  6 BYTEs    reserved (part of BPB above)
  3097.  46h    BYTE    last track accessed
  3098. ---removable media---
  3099.  47h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  3100. ---fixed media---
  3101.  47h    WORD    partition (FFFFh = primary, 0001h = extended)
  3102.         always 0001h for DOS 5+
  3103.  49h    WORD    absolute cylinder number of partition's start on physical drive
  3104.         (FFFFh if primary partition in DOS 4.x)
  3105. ------
  3106.  4Bh 11 BYTEs    volume label or "NO NAME    " if none (apparently taken from
  3107.           extended boot record rather than root directory)
  3108.  56h    BYTE    terminating null for volume label
  3109.  57h    DWORD    serial number
  3110.  5Bh  8 BYTEs    filesystem type ("FAT12      " or "FAT16    ")
  3111.  63h    BYTE    terminating null for filesystem type
  3112. SeeAlso: #02601,#02602
  3113.  
  3114. Bitfields for flags describing drive:
  3115. Bit(s)    Description    (Table 02604)
  3116.  0    fixed media
  3117.  1    door lock ("changeline") supported
  3118.  2    current BPB locked
  3119.  3    all sectors in a track are the same size
  3120.  4    physical drive has multiple logical units
  3121.  5    current logical drive for shared physical drive
  3122.  6    disk change detected
  3123.  7    device parameters were changed (set DASD before formatting)
  3124.     (see #01560 at INT 21/AX=440Dh"DOS 3.2+")
  3125.  8    disk reformatted (BPB of current media was changed)
  3126.  9    access flag (fixed media only, disables reads and writes)
  3127.     (see #01566 at INT 21/AX=440Dh"DOS 3.2+")
  3128. --------f-2F1000-----------------------------
  3129. INT 2F - SHARE - INSTALLATION CHECK
  3130.     AX = 1000h
  3131. Return: AL = status
  3132.         00h not installed, OK to install
  3133.         01h not installed, not OK to install
  3134.         FFh installed
  3135. BUGS:    values of AL other than 00h put DOS 3.x SHARE into an infinite loop
  3136.       (08E9: OR  AL,AL
  3137.        08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3)
  3138.     values of AL other than described here put PC-DOS 4.00 into the same
  3139.       loop (the buggy instructions are the same)
  3140. Notes:    supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  3141.     if DOS 4.01 SHARE was automatically loaded, file sharing is in an
  3142.       inactive state (due to the undocumented /NC flag used by the autoload
  3143.       code) until this call is made
  3144.     DOS 5+ chains to the previous handler if AL <> 00h on entry
  3145.     Windows Enhanced mode hooks this call and reports that SHARE is
  3146.       installed even when it is not
  3147. SeeAlso: AX=1080h,INT 21/AH=52h,INT 21/AX=4457h/DX=FFFFh
  3148. --------d-2F1001-----------------------------
  3149. INT 2F U - DR DOS 6.0 SHARE internal - SET ???
  3150.     AX = 1001h
  3151.     DX:BX -> ???function
  3152. Notes:    this function is also supported by SuperStor, a disk-compression
  3153.       program by Addstor which is bundled with DR DOS 6.0, and the
  3154.       Novell DOS 7 DELWATCH.EXE
  3155.     the default handler for the pointer set by this call under DELWATCH
  3156.       simply returns with CF set
  3157. SeeAlso: AX=1000h,AX=F800h
  3158. --------f-2F1040-----------------------------
  3159. INT 2F U - DOS 4 only SHARE internal - ???
  3160.     AX = 1040h
  3161.     ???
  3162. Return: AL = FFh???
  3163. SeeAlso: AX=1000h
  3164. --------f-2F1080-----------------------------
  3165. INT 2F U - DOS 4 only SHARE internal - TURN ON FILE SHARING CHECKS
  3166.     AX = 1080h
  3167. Return: AL = status
  3168.         F0h successful
  3169.         FFh checking was already on
  3170. Note:    DOS 4.x SHARE has dual functions: FCB support for large (>32M) media
  3171.       and file sharing checks.  The undocumented commandline flag /NC can
  3172.       be used to disable the sharing code.
  3173. SeeAlso: AX=1000h,AX=1081h
  3174. --------f-2F1081-----------------------------
  3175. INT 2F U - DOS 4 only SHARE internal - TURN OFF FILE SHARING CHECKS
  3176.     AX = 1081h
  3177. Return: AL = status
  3178.         F0h successful
  3179.         FFh checking was already off
  3180. Note:    (see AX=1080h)
  3181. SeeAlso: AX=1000h,AX=1080h
  3182. --------O-2F10FE-----------------------------
  3183. INT 2F U - Novell DOS 7 DELWATCH.EXE - INSTALLATION CHECK
  3184.     AX = 10FEh
  3185. Return: AX = 20FFh if installed and active
  3186.         DX:BX -> private entry point (see #02605)
  3187. SeeAlso: #01352,INT 21/AX=4306h,INT 21/AX=5704h
  3188.  
  3189. (Table 02605)
  3190. Call DELWATCH private entry point with:
  3191.     AH = function
  3192.         00h NOP???
  3193.         Return: AX = 0000h
  3194.             CX = 0004h (unsupported function)
  3195.         01h disable DELWATCH on drive
  3196.         AL = drive number (00h = A:)
  3197.         Return: AX = status (0000h if failed, FFFFh if successful)
  3198.         02h ???
  3199.         AL = drive number (00h = A:)
  3200.         ???
  3201.         Return: ???
  3202.         03h    ???
  3203.         AL = drive number (00h = A:)
  3204.         CX = ??? (0000h/0001h)
  3205.         ???
  3206.         Return: ???
  3207.         04h ???
  3208.         AL = drive number (00h = A:)
  3209.         ???
  3210.         Return: ???
  3211.         05h ???
  3212.         AL = drive number (00h = A:)
  3213.         ???
  3214.         Return: ???
  3215.         06h enable DELWATCH on drive
  3216.         AL = drive number with bit 7 set (80h = A:, etc.)
  3217.         BX = maximum files of same name in one directory to save
  3218.         CX = maximum files to save on this disk
  3219.         ???
  3220.         Return: AX = status
  3221.                 0000h failed
  3222.                 FFFFh successful
  3223.             CX = error code on failure
  3224.                 (0004h if AL < 80h on entry)
  3225.         07h ???
  3226.         08h set file extensions list
  3227.         AL = sense (00h exclude named extensions, 01h only named ext.)
  3228.         DS:BX -> 31-byte ASCIZ extension list (three blank-padded bytes
  3229.               per extension)
  3230.         Return: AX = FFFFh (successful)
  3231.         09h    ???
  3232.         AL = drive number (00h = A:)
  3233.         ???
  3234.         Return: ???
  3235.         0Ah ???
  3236.         AL = drive number (00h = A:)
  3237.         ???
  3238.         Return: ???
  3239.         0Bh reset ???
  3240.         Return: AX = FFFFh (successful)
  3241.         see also function 0Dh
  3242.         0Ch check if drive enabled
  3243.         AL = drive number with bit 7 set (80h = A:, etc.)
  3244.         Return: AX = state
  3245.                 0000h disabled or error (check CX)
  3246.                 0001h drive enabled
  3247.             CX = error code (0004h invalid drive number)
  3248.         0Dh set ???
  3249.         BX = ???
  3250.         Return: AX = FFFFh (successful)
  3251.         see also function 0Bh
  3252.         0Eh ???
  3253.         AL = drive number (00h = A:)
  3254.         ???
  3255.         Return: ???
  3256. Return: AX = 0000h, CX = 0001h if DELWATCH busy
  3257.     registers unchanged if AH >= 0Fh on entry
  3258. --------O-2F10FF-----------------------------
  3259. INT 2F U - Multiplex - DR DOS 5.0 - ???
  3260.     AX = 10FFh
  3261.     ES:BX -> ???
  3262. Note:    sets pointer in kernel
  3263. --------N-2F1100-----------------------------
  3264. INT 2F C - NETWORK REDIRECTOR - INSTALLATION CHECK
  3265.     AX = 1100h
  3266. Return: AL = status
  3267.         00h not installed, OK to install
  3268.         01h not installed, not OK to install
  3269.         FFh installed
  3270.         AH = product identifier (ad hoc by various manufacturers)
  3271.             00h if PC Tools v8 DRIVEMAP
  3272.             42h ('B') for Beame&Whiteside BWNFS v3.0a
  3273.             6Eh ('n') for NetWare Lite v1.1 CLIENT
  3274. Notes:    this function is called by the DOS 3.1+ kernel
  3275.     in DOS 4.x only, the 11xx calls are all in IFSFUNC.EXE, not in the
  3276.       PC LAN Program redirector; DOS 5+ moves the calls back into the
  3277.       redirector
  3278.     the PC Network 1.00 redirector (renamed to PC LAN Program in 1.1-1.3)
  3279.       only supports AL=00h-27h
  3280. --------d-2F1100SFDADA-----------------------
  3281. INT 2F - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK
  3282.     AX = 1100h subfn DADAh
  3283.     STACK: WORD DADAh
  3284. Return: AL = status
  3285.         00h not installed, OK to install
  3286.         STACK unchanged
  3287.         01h not installed, not OK to install
  3288.         STACK unchanged
  3289.         FFh installed
  3290.         STACK: WORD    ADADh if MSCDEX installed
  3291.                 DADBh if Lotus CD/Networker installed
  3292. Note:    although MSCDEX sets the stack word to ADADh on return, any value other
  3293.       than DADAh is considered to mean that MSCDEX is already installed;
  3294.       Lotus CD/Networker v4+ uses this feature to fool MSCDEX into
  3295.       thinking it is already installed when it is in fact CD/Networker
  3296.       that is installed
  3297. Index:    installation check;Lotus CD/Networker
  3298. Index:    Lotus CD/Networker;installation check
  3299. --------N-2F1101-----------------------------
  3300. INT 2F CU - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY
  3301.     AX = 1101h
  3302.     SS = DOS DS
  3303.     SDA first filename pointer -> fully-qualified directory name
  3304.     SDA CDS pointer -> current directory structure for drive with dir
  3305. Return: CF set on error
  3306.         AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3307.     CF clear if successful
  3308. Note:    this function is called by the DOS 3.1+ kernel
  3309. SeeAlso: AX=1103h,AX=1105h,INT 21/AH=3Ah,INT 21/AH=60h
  3310. --------N-2F1102-----------------------------
  3311. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - REMOVE REMOTE DIRECTORY
  3312.     AX = 1102h
  3313.     SS = DOS DS
  3314.     SDA first filename pointer -> fully-qualified directory name
  3315.     SDA CDS pointer -> current directory structure for drive with dir
  3316. Return: CF set on error
  3317.         AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3318.     CF clear if successful
  3319. Note:    appears to be identical to AX=1101h; MS internal documentation calls
  3320.       this function "SEQ_RMDIR"
  3321. SeeAlso: AX=1101h
  3322. --------N-2F1103-----------------------------
  3323. INT 2F CU - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY
  3324.     AX = 1103h
  3325.     SS = DOS DS
  3326.     SDA first filename pointer -> fully-qualified directory name
  3327.     SDA CDS pointer -> current directory structure for drive with dir
  3328. Return: CF set on error
  3329.         AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3330.     CF clear if successful
  3331. Note:    this function is called by the DOS 3.1+ kernel
  3332. SeeAlso: AX=1101h,AX=1105h,INT 21/AH=39h,INT 21/AH=60h
  3333. --------N-2F1104-----------------------------
  3334. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - MAKE REMOTE DIRECTORY
  3335.     AX = 1104h
  3336.     SS = DOS DS
  3337.     SDA first filename pointer -> fully-qualified directory name
  3338.     SDA CDS pointer -> current directory structure for drive with dir
  3339. Return: CF set on error
  3340.         AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3341.     CF clear if successful
  3342. Note:    appears to be identical to AX=1103h
  3343. SeeAlso: AX=1103h
  3344. --------N-2F1105-----------------------------
  3345. INT 2F CU - NETWORK REDIRECTOR - CHDIR
  3346.     AX = 1105h
  3347.     SS = DOS DS
  3348.     SDA first filename pointer -> fully-qualified directory name
  3349.     SDA CDS pointer -> current directory structure for drive with dir
  3350. Return: CF set on error
  3351.         AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3352.     CF clear if successful
  3353.         CDS updated with new path
  3354. Notes:    this function is called by the DOS 3.1+ kernel
  3355.     directory string in CDS should not have a terminating backslash unless
  3356.       the current directory is the root
  3357. SeeAlso: AX=1101h,AX=1103h,INT 21/AH=3Bh,INT 21/AH=60h
  3358. --------N-2F1106-----------------------------
  3359. INT 2F CU - NETWORK REDIRECTOR - CLOSE REMOTE FILE
  3360.     AX = 1106h
  3361.     ES:DI -> filled-in SFT (assumed to point at SDA's current SFT field)
  3362. Return: CF set on error
  3363.         AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3364.     CF clear if successful
  3365.         SFT updated (redirector must decrement open count, which may be
  3366.           done with INT 2F/AX=1208h)
  3367.     ES:DI must be preserved
  3368. Note:    this function is called by the DOS 3.1+ kernel
  3369. SeeAlso: AX=1116h,AX=1201h,AX=1208h,AX=1227h,INT 21/AH=3Eh
  3370. --------N-2F1107-----------------------------
  3371. INT 2F CU - NETWORK REDIRECTOR - COMMIT REMOTE FILE
  3372.     AX = 1107h
  3373.     ES:DI -> filled-in SFT (assumed to point at SDA's current SFT field)
  3374. Return: CF set on error
  3375.         AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3376.     CF clear if successful
  3377.         all buffers for file flushed
  3378.         directory entry updated
  3379.     ES:DI must be preserved
  3380. Desc:    perform all the buffer flushing, directory updates, etc. that would be
  3381.       performed on a file close, but do not decrement the SFT reference
  3382.       count
  3383. Note:    this function is called by the DOS 3.1+ kernel
  3384. SeeAlso: INT 21/AH=68h,INT 21/AX=5D01h
  3385. --------N-2F1108-----------------------------
  3386. INT 2F CU - NETWORK REDIRECTOR - READ FROM REMOTE FILE
  3387.     AX = 1108h
  3388.     ES:DI -> SFT
  3389.         SFT DPB field -> DPB of drive containing file
  3390.     CX = number of bytes
  3391.     SS = DOS DS
  3392.     SDA DTA field -> user buffer
  3393. Return: CF set on error
  3394.         AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3395.     CF clear if successful
  3396.         CX = number of bytes read (0000h = end of file)
  3397.         SFT updated
  3398. Note:    this function is called by the DOS 3.1+ kernel
  3399. SeeAlso: AX=1109h,AX=1229h,INT 21/AH=3Fh"DOS",INT 21/AX=5D06h
  3400. --------N-2F1109-----------------------------
  3401. INT 2F CU - NETWORK REDIRECTOR - WRITE TO REMOTE FILE
  3402.     AX = 1109h
  3403.     ES:DI -> SFT
  3404.         SFT DPB field -> DPB of drive containing file
  3405.     CX = number of bytes
  3406.     SS = DOS DS
  3407.     SDA DTA field -> user buffer
  3408. Return: CF set on error
  3409.         AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3410.     CF clear if successful
  3411.         CX = number of bytes written
  3412.         SFT updated
  3413. Notes:    this function is called by the DOS 3.1+ kernel
  3414.     PrintCache v3.1 PCACHE.EXE intercepts this function for SFTs where
  3415.       the Device Driver Header field points at PCACHE, but does not
  3416.       intercept any other network redirector functions
  3417. SeeAlso: AX=1107h,AX=1108h,INT 21/AH=40h,INT 21/AX=5D06h
  3418. --------N-2F110A-----------------------------
  3419. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - LOCK REGION OF FILE
  3420.     AX = 110Ah
  3421.     BX = file handle
  3422.     CX:DX = starting offset
  3423.     SI = high word of size
  3424.     STACK: WORD low word of size
  3425.     ES:DI -> SFT
  3426.         SFT DPB field -> DPB of drive containing file
  3427.     SS = DOS DS
  3428. Return: CF set on error
  3429.        AL = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3430.     STACK unchanged
  3431. Notes:    this function is called by the DOS 3.10-3.31 kernel
  3432.     the redirector is expected to resolve lock conflicts
  3433. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  3434. --------N-2F110A-----------------------------
  3435. INT 2F CU - NETWORK REDIRECTOR (DOS 4.0+) - LOCK/UNLOCK REGION OF FILE
  3436.     AX = 110Ah
  3437.     BL = function
  3438.         00h lock
  3439.         01h unlock
  3440.     CX = number of lock/unlock parameters (0001h for DOS 4.0-6.1)
  3441.     DS:DX -> parameter block (see #02606)
  3442.     ES:DI -> SFT
  3443.         SFT DPB field -> DPB of drive containing file
  3444.     SS = DOS DS
  3445. Return: CF set on error
  3446.        AL = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3447. Notes:    this function is called by the DOS 4.0+ kernel
  3448.     the redirector is expected to resolve lock conflicts
  3449. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  3450.  
  3451. Format of parameter block entry [array, but currently limited to single entry]:
  3452. Offset    Size    Description    (Table 02606)
  3453.  00h    DWORD    start offset
  3454.  04h    DWORD    size of region
  3455. --------N-2F110B-----------------------------
  3456. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - UNLOCK REGION OF FILE
  3457.     AX = 110Bh
  3458.     BX = file handle
  3459.     CX:DX = starting offset
  3460.     SI = high word of size
  3461.     STACK: WORD low word of size
  3462.     ES:DI -> SFT for file
  3463.         SFT DPB field -> DPB of drive containing file
  3464. Return: CF set on error
  3465.        AL = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3466.     STACK unchanged
  3467. Note:    this function is called by the DOS 3.1-3.31 kernel; DOS 4.0+ calls
  3468.       AX=110Ah instead
  3469. SeeAlso: AX=110Ah,INT 21/AH=5Ch
  3470. --------N-2F110C-----------------------------
  3471. INT 2F CU - NETWORK REDIRECTOR - GET DISK INFORMATION
  3472.     AX = 110Ch
  3473.     ES:DI -> current directory structure for desired drive
  3474. Return: CF clear if data valid
  3475.         AL = sectors per cluster
  3476.         AH = media ID byte
  3477.         BX = total clusters
  3478.         CX = bytes per sector
  3479.         DX = number of available clusters
  3480.     CF set if data invalid
  3481. Note:    this function is called by the DOS 3.1+ kernel
  3482. SeeAlso: INT 21/AH=36h
  3483. --------N-2F110D-----------------------------
  3484. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - SET REMOTE FILE'S ATTRIBUTES
  3485.     AX = 110Dh
  3486.     SDA first filename pointer -> name of file
  3487.     ???
  3488. Return: ???
  3489. Note:    similar to AX=110Eh
  3490. SeeAlso: AX=110Eh
  3491. --------N-2F110E-----------------------------
  3492. INT 2F CU - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES
  3493.     AX = 110Eh
  3494.     SS = DOS DS
  3495.     SDA first filename pointer -> fully-qualified name of file
  3496.     SDA CDS pointer -> current directory structure for drive with file
  3497.     STACK: WORD new file attributes
  3498. Return: CF set on error
  3499.         AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3500.     CF clear if successful
  3501.     STACK unchanged
  3502. Note:    this function is called by the DOS 3.1+ kernel
  3503. SeeAlso: AX=110Dh,AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h
  3504. --------N-2F110F-----------------------------
  3505. INT 2F CU - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  3506.     AX = 110Fh
  3507.     SS = DOS DS
  3508.     SDA first filename pointer -> fully-qualified name of file
  3509.     SDA CDS pointer -> current directory structure for drive with file
  3510.         (offset = FFFFh if null CDS [net direct request])
  3511.     SDA search attributes = mask of attributes which may be included in
  3512.           search for file
  3513. Return: CF set on error
  3514.         AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3515.     CF clear if successful
  3516.         AX = file attributes
  3517.         BX:DI = file size
  3518.         CX = time stamp of file
  3519.         DX = date stamp of file
  3520. Notes:    this function is called by the DOS 3.1+ kernel
  3521.     wildcards and device names are not permitted
  3522. SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h
  3523. --------N-2F1110-----------------------------
  3524. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  3525.     AX = 1110h
  3526.     SDA first filename pointer -> name of file
  3527.     ???
  3528. Return: ???
  3529. Note:    appears to be similar to AX=110Fh
  3530. SeeAlso: AX=110Eh
  3531. --------N-2F1111-----------------------------
  3532. INT 2F CU - NETWORK REDIRECTOR - RENAME REMOTE FILE
  3533.     AX = 1111h
  3534.     SS = DS = DOS DS
  3535.     SDA first filename pointer = offset of fully-qualified old name
  3536.     SDA second filename pointer = offset of fully-qualified new name
  3537.     SDA CDS pointer -> current directory structure for drive with file
  3538. Return: CF set on error
  3539.         AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3540.     CF clear if successful
  3541. Note:    this function is called by the DOS 3.1+ kernel
  3542. SeeAlso: AX=1112h,INT 21/AH=56h,INT 21/AH=60h
  3543. --------N-2F1112-----------------------------
  3544. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - RENAME REMOTE FILE
  3545.     AX = 1112h
  3546.     SS = DS = DOS DS
  3547.     SDA first filename pointer -> name of file
  3548.     ???
  3549. Return: ???
  3550. Note:    similar to AX=1111h
  3551. SeeAlso: AX=1111h
  3552. --------N-2F1113-----------------------------
  3553. INT 2F CU - NETWORK REDIRECTOR - DELETE REMOTE FILE
  3554.     AX = 1113h
  3555.     SS = DS = DOS DS
  3556.     SDA first filename pointer -> fully-qualified filename in DOS DS
  3557.     SDA CDS pointer -> current directory structure for drive with file
  3558. Return: CF set on error
  3559.         AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3560.     CF clear if successful
  3561. Notes:    this function is called by the DOS 3.1+ kernel
  3562.     the filespec may contain wildcards
  3563. SeeAlso: AX=1114h,INT 21/AH=41h,INT 21/AH=60h
  3564. --------N-2F1114-----------------------------
  3565. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - DELETE REMOTE FILE
  3566.     AX = 1114h
  3567.     SDA first filename pointer -> name of file
  3568.     ???
  3569. Return: ???
  3570. Note:    similar to AX=1113h
  3571. SeeAlso: AX=1113h
  3572. --------N-2F1115-----------------------------
  3573. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - OPEN REMOTE FILE
  3574.     AX = 1115h
  3575.     SS = DOS DS
  3576.     ES:DI -> SFT ???
  3577.     ???
  3578. Return: ???
  3579. Note:    similar to AX=1116h
  3580. SeeAlso: AX=1116h,AX=112Eh
  3581. --------N-2F1116-----------------------------
  3582. INT 2F CU - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE
  3583.     AX = 1116h
  3584.     ES:DI -> uninitialized SFT
  3585.     SS = DOS DS
  3586.     SDA first filename pointer -> fully-qualified name of file to open
  3587.     STACK: WORD file access and sharing modes (see #01402 at INT 21/AH=3Dh)
  3588. Return: CF set on error
  3589.         AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3590.     CF clear if successful
  3591.         SFT filled (except handle count, which DOS manages itself)
  3592.     STACK unchanged
  3593. Note:    this function is called by the DOS 3.1+ kernel
  3594. SeeAlso: AX=1106h,AX=1115h,AX=1117h,AX=1118h,AX=112Eh,INT 21/AH=3Dh
  3595. SeeAlso: INT 21/AH=60h
  3596. --------N-2F1117-----------------------------
  3597. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE
  3598.     AX = 1117h
  3599.     ES:DI -> uninitialized SFT
  3600.     SS = DOS DS
  3601.     SDA first filename pointer -> fully-qualified name of file to open
  3602.     SDA CDS pointer -> current directory structure for drive with file
  3603.     STACK: WORD file creation mode
  3604.             low byte = file attributes (see #01401 at INT 21/AH=3Ch)
  3605.             high byte = 00h normal create, 01h create new file
  3606. Return: CF set on error
  3607.         AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3608.     CF clear if successful
  3609.         SFT filled (except handle count, which DOS manages itself)
  3610.     STACK unchanged
  3611. Note:    this function is called by the DOS 3.1+ kernel
  3612. SeeAlso: AX=1106h,AX=1116h,AX=1118h,AX=112Eh,INT 21/AH=3Ch,INT 21/AH=60h
  3613. --------N-2F1118-----------------------------
  3614. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE WITHOUT CDS
  3615.     AX = 1118h
  3616.     ES:DI -> uninitialized SFT
  3617.     SS = DOS DS
  3618.     SDA first filename pointer -> fully-qualified name of file
  3619.     STACK: WORD file creation mode
  3620.             low byte = file attributes
  3621.             high byte = 00h normal create, 01h create new file
  3622. Return: ???
  3623.     STACK unchanged
  3624. Note:    this function is called by the DOS 3.1+ kernel when creating a file
  3625.       on a drive for which the SDA CDS pointer has offset FFFFh
  3626. SeeAlso: AX=1106h,AX=1116h,AX=1117h,AX=112Eh,INT 21/AH=60h
  3627. --------N-2F1119-----------------------------
  3628. INT 2F CU - NETWORK REDIRECTOR - FIND FIRST FILE WITHOUT CDS
  3629.     AX = 1119h
  3630.     SS = DS = DOS DS
  3631.     [DTA] = uninitialized 21-byte findfirst search data
  3632.           (see #01626 at INT 21/AH=4Eh)
  3633.     SDA first filename pointer -> fully-qualified search template
  3634.     SDA search attribute = attribute mask for search
  3635. Return: CF set on error
  3636.         AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3637.     CF clear if successful
  3638.         [DTA] = updated findfirst search data
  3639.             (bit 7 of first byte must be set)
  3640.         [DTA+15h] = standard directory entry for file (see #01352)
  3641. Notes:    this function is called by the DOS 3.1+ kernel
  3642.     DOS 4.x IFSFUNC returns CF set, AX=0003h
  3643. SeeAlso: AX=111Ah,AX=111Bh,INT 21/AH=1Ah
  3644. --------N-2F111A-----------------------------
  3645. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - FIND NEXT FILE WITHOUT CDS
  3646.     AX = 111Ah
  3647.     ???
  3648. Return: CF set
  3649.         AX = error code (03h for DOS 4.01 IFSFUNC)
  3650. Note:    use AX=111Ch for DOS 5+
  3651. SeeAlso: AX=1119h,AX=111Ch
  3652. --------N-2F111B-----------------------------
  3653. INT 2F CU - NETWORK REDIRECTOR - FINDFIRST
  3654.     AX = 111Bh
  3655.     SS = DS = DOS DS
  3656.     [DTA] = uninitialized 21-byte findfirst search data
  3657.           (see #01626 at INT 21/AH=4Eh)
  3658.     SDA first filename pointer -> fully-qualified search template
  3659.     SDA CDS pointer -> current directory structure for drive with file
  3660.     SDA search attribute = attribute mask for search
  3661. Return: CF set on error
  3662.         AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3663.     CF clear if successful
  3664.         [DTA] = updated findfirst search data
  3665.             (bit 7 of first byte must be set)
  3666.         [DTA+15h] = standard directory entry for file (see #01352)
  3667. Note:    this function is called by the DOS 3.1+ kernel
  3668. SeeAlso: AX=1119h,AX=111Ch,INT 21/AH=1Ah,INT 21/AH=4Eh,INT 21/AH=60h
  3669. --------N-2F111C-----------------------------
  3670. INT 2F CU - NETWORK REDIRECTOR - FINDNEXT
  3671.     AX = 111Ch
  3672.     SS = DS = DOS DS
  3673.     ES:DI -> CDS
  3674.     ES:DI -> DTA (MSDOS v5.0)
  3675.     [DTA] = 21-byte findfirst search data
  3676.           (see #01626 at INT 21/AH=4Eh)
  3677. Return: CF set on error
  3678.         AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3679.     CF clear if successful
  3680.         [DTA] = updated findfirst search data
  3681.             (bit 7 of first byte must be set)
  3682.         [DTA+15h] = standard directory entry for file (see #01352)
  3683. Note:    this function is called by the DOS 3.1+ kernel
  3684. SeeAlso: AX=1119h,AX=111Bh,INT 21/AH=1Ah,INT 21/AH=4Fh
  3685. --------N-2F111D-----------------------------
  3686. INT 2F CU - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS (ABORT)
  3687.     AX = 111Dh
  3688.     SS = DOS DS
  3689.     SDA PSP segment field = PSP of terminating process
  3690. Return: nothing
  3691. Notes:    used when a process is aborted; the process being terminated is
  3692.       indicated by the "sharing PSP" field in the SDA (offset 1Ah/1Ch)
  3693.     this function is called by the DOS 3.1+ kernel
  3694.     closes all FCBs opened by process
  3695. SeeAlso: INT 21/AX=5D04h
  3696. --------N-2F111E-----------------------------
  3697. INT 2F CU - NETWORK REDIRECTOR - DO REDIRECTION
  3698.     AX = 111Eh
  3699.     SS = DOS DS
  3700.     STACK: WORD function to execute
  3701.         5F00h  get redirection mode
  3702.             BL = type (03h printer, 04h disk)
  3703.             Return: BH = state (00h off, 01h on)
  3704.         5F01h  set redirection mode
  3705.             BL = type (03h printer, 04h disk)
  3706.             BH = state (00h off, 01h on)
  3707.         5F02h  get redirection list entry
  3708.             BX = redirection list index
  3709.             DS:SI -> 16-byte local device name buffer
  3710.             ES:DI -> 128-byte network name buffer
  3711.             Return: must set user's BX to device type and CX to
  3712.                 stored parameter value, using AX=1218h to get
  3713.                 stack frame address
  3714.         5F03h  redirect device
  3715.             BL = device type (see INT 21/AX=5F03h)
  3716.             CX = stored parameter value
  3717.             DS:SI -> ASCIZ source device name
  3718.             ES:DI -> destination ASCIZ network path + ASCIZ passwd
  3719.         5F04h  cancel redirection
  3720.             DS:SI -> ASCIZ device name or network path
  3721.         5F05h  get redirection list extended entry
  3722.             BX = redirection list index
  3723.             DS:SI -> buffer for ASCIZ source device name
  3724.             ES:DI -> buffer for destination ASCIZ network path
  3725.             Return: BH = status flag
  3726.                 BL = type (03h printer, 04h disk)
  3727.                 CX = stored parameter value
  3728.                 BP = NETBIOS local session number
  3729.         5F06h  similar to 5F05h???
  3730. Return: CF set on error
  3731.         AX = error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3732.     STACK unchanged
  3733. Notes:    this function is called by the DOS 3.1+ kernel on INT 21/AH=5Fh
  3734.       (including LAN Manager calls)
  3735.     the PC Network 1.00 redirector does not support function 5F06h
  3736. SeeAlso: INT 21/AX=5F00h,INT 21/AX=5F01h,INT 21/AX=5F02h,INT 21/AX=5F03h
  3737. SeeAlso: INT 21/AX=5F04h,INT 21/AX=5F05h,INT 21/AX=5F06h
  3738. --------N-2F111F-----------------------------
  3739. INT 2F CU - NETWORK REDIRECTOR - PRINTER SETUP
  3740.     AX = 111Fh
  3741.     STACK: WORD function
  3742.         5E02h  set printer setup
  3743.         5E03h  get printer setup
  3744.         5E04h  set printer mode
  3745.         5E05h  get printer mode
  3746. Return: CF set on error
  3747.         AX = error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3748.     STACK unchanged
  3749. Note:    this function is called by the DOS 3.1+ kernel
  3750. SeeAlso: INT 21/AX=5E02h,INT 21/AX=5E03h,INT 21/AX=5E04h,INT 21/AX=5E05h
  3751. --------N-2F1120-----------------------------
  3752. INT 2F CU - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS
  3753.     AX = 1120h
  3754.     DS = DOS DS
  3755.     ???
  3756. Return: CF clear (successful)
  3757. Notes:    this function is called by the DOS 3.1+ kernel
  3758.     uses CDS array pointer and LASTDRIVE= entries in DOS list of lists
  3759. SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h
  3760. --------N-2F1121-----------------------------
  3761. INT 2F CU - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE
  3762.     AX = 1121h
  3763.     CX:DX = offset (in bytes) from end
  3764.     ES:DI -> SFT
  3765.         SFT DPB field -> DPB of drive with file
  3766.     SS = DOS DS
  3767. Return: CF set on error
  3768.         AL = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3769.     CF clear if successful
  3770.         DX:AX = new file position
  3771. Note:    this function is called by the DOS 3.1+ kernel, but only when seeking
  3772.       from the end of a file opened with sharing modes set in such a
  3773.       manner that another process is able to change the size of the file
  3774.       while it is already open
  3775. SeeAlso: AX=1228h,INT 21/AH=42h
  3776. --------N-2F1122-----------------------------
  3777. INT 2F CU - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK
  3778.     AX = 1122h
  3779.     SS = DOS DS
  3780.     DS = PSP of process about to terminate
  3781. Return: ???
  3782. Notes:    this function is called by the DOS 3.1+ kernel
  3783.     after calling this function, the kernel calls INT 2F/AX=111Dh
  3784. SeeAlso: AX=111Dh,INT 21/AH=4Ch,INT 60/DI=0601h
  3785. --------N-2F1123-----------------------------
  3786. INT 2F CU - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME
  3787.     AX = 1123h
  3788.     DS:SI -> ASCIZ filename to canonicalize
  3789.     ES:DI -> 128-byte buffer for qualified name
  3790. Return: CF set if not resolved
  3791. Notes:    called by MS-DOS 3.1+ kernel, but not called by DR DOS 5.0 unless the
  3792.       filename matches the name of a character device
  3793.     called first when DOS attempts to resolve a filename (unless inside an
  3794.       AX=5D00h server call); if this fails, DOS resolves the name locally
  3795. SeeAlso: AX=1221h,INT 21/AH=60h
  3796. --------N-2F1124-----------------------------
  3797. INT 2F CU - NETWORK REDIRECTOR - TURN OFF REMOTE PRINTER
  3798.     AX = 1124h
  3799.     ES:DI -> SFT
  3800.     SS = DOS DS
  3801.     ???
  3802. Return: CX = ???
  3803. Note:    this function is called by the DOS 3.1+ kernel if AX=1126h
  3804.       returns CF set
  3805. SeeAlso: AX=1126h
  3806. --------N-2F1125-----------------------------
  3807. INT 2F CU - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE
  3808.     AX = 1125h
  3809.     STACK: WORD subfunction
  3810.         5D07h get print stream state
  3811.             Return: DL = current state
  3812.         5D08h set print stream state
  3813.             DL = new state
  3814.         5D09h finish print job
  3815. Return: CF set on error
  3816.         AX = error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3817.     STACK unchanged
  3818. Note:    this function is called by the DOS 3.1+ kernel
  3819. SeeAlso: INT 21/AX=5D07h,INT 21/AX=5D08h,INT 21/AX=5D09h
  3820. --------N-2F1126-----------------------------
  3821. INT 2F CU - NETWORK REDIRECTOR - REMOTE PRINTER ECHO ON/OFF
  3822.     AX = 1126h
  3823.     ES:DI -> SFT for file handle 4???
  3824.     SS = DOS DS???
  3825.     ???
  3826. Return: CF set on error
  3827. Notes:    this function is called by the DOS 3.1+ kernel
  3828.     called when print echoing (^P, ^PrtSc) changes state and STDPRN has
  3829.       bit 11 of the device information word in the SFT set
  3830. SeeAlso: AX=1124h
  3831. --------N-2F1127-----------------------------
  3832. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  3833.     AX = 1127h
  3834. Return: CF set
  3835.         AX = 0001h (invalid function) (see #01680 at INT 21/AH=59h/BX=0000h)
  3836. --------N-2F1127BX4E57-----------------------
  3837. INT 2F - NetWare 4.0 - REMOTE FILE COPY
  3838.     AX = 1127h
  3839.     BX = 4E57h ('NW') (signature identifying this as a NetWare call)
  3840.     SI = source file handle
  3841.     DI = destination file handle
  3842.     DX:CX = number of bytes to copy, starting at current file position
  3843. Return: CF clear if successful
  3844.     CF set on error
  3845.         AX = error code (05h,06h,0Bh,11h,3Bh) (see #01680)
  3846.     DX:CX = number of bytes successfully copied (file position updated)
  3847. Notes:    this is the only call which may be made directly to the NetWare
  3848.       redirector from an application
  3849.     COMMAND.COM's COPY and DOS's XCOPY reportedly call INT 21/AX=1127h in
  3850.       order to speed up copies between files on the same network server;
  3851.       if error code 11h (not same device) is returned, the copy is
  3852.       performed in the usual manner.  However, no such calls appear to
  3853.       be present in MS-DOS 6.22.
  3854. --------N-2F1128-----------------------------
  3855. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  3856.     AX = 1128h
  3857. Return: CF set
  3858.         AX = 0001h (invalid function) (see #01680 at INT 21/AH=59h/BX=0000h)
  3859. --------N-2F1129-----------------------------
  3860. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  3861.     AX = 1129h
  3862. Return: CF set
  3863.         AX = 0001h (invalid function) (see #01680 at INT 21/AH=59h/BX=0000h)
  3864. --------N-2F112A-----------------------------
  3865. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - CLOSE ALL FILES FOR PROCESS
  3866.     AX = 112Ah
  3867.     DS = DOS DS
  3868.     ???
  3869. Return: ???
  3870. Note:    does something to each IFS driver
  3871. --------N-2F112B-----------------------------
  3872. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GENERIC IOCTL
  3873.     AX = 112Bh
  3874.     SS = DOS DS
  3875.     CX = function/category
  3876.     DS:DX -> parameter block
  3877.     STACK: WORD value of AX on entry to INT 21 (440Ch or 440Dh)
  3878.     ???
  3879. Return: CF set on error
  3880.         AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3881.     CF clear if successful
  3882. Note:    this function is called by the DOS 4.0 kernel
  3883. --------N-2F112C-----------------------------
  3884. INT 2F CU - NETWORK REDIRECTOR (DOS 4.0+) - "UPDATE_CB" - ???
  3885.     AX = 112Ch
  3886.     SS = DOS DS
  3887.     SDA current SFT pointer -> SFT for file
  3888.     ???
  3889. Return: CF set on error
  3890. Note:    called by SHARE in DOS 5.0-6.0
  3891. --------N-2F112D-----------------------------
  3892. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - EXTENDED ATTRIBUTES
  3893.     AX = 112Dh
  3894.     BL = subfunction (value of AL on INT 21)
  3895.         02h get extended attributes
  3896.         03h get extended attribute properties
  3897.         04h set extended attributes
  3898.         Return: CF clear
  3899.         else ???
  3900.         Return: CX = ??? (00h or 02h for DOS 4.01)
  3901.     ES:DI -> SFT for file
  3902.     SS = DOS DS
  3903. Return: DS = DOS DS
  3904. Note:    this function is called by the DOS 4.0 kernel on INT 21/AX=5702h,
  3905.       INT 21/AX=5703h, and INT 21/AX=5704h
  3906. SeeAlso: INT 21/AX=5702h,INT 21/AX=5703h,INT 21/AX=5704h,INT 21/AH=6Eh
  3907. --------N-2F112E-----------------------------
  3908. INT 2F CU - NETWORK REDIRECTOR (DOS 4.0+) - EXTENDED OPEN/CREATE FILE
  3909.     AX = 112Eh
  3910.     SS = DS = DOS DS
  3911.     ES:DI -> uninitialized SFT for file
  3912.     STACK: WORD file attribute for created/truncated file
  3913.             low byte = file attributes
  3914.             high byte = 00h normal create/open, 01h create new file
  3915.     SDA first filename pointer -> fully-qualified filename
  3916.     SDA extended file open action = action code
  3917.           (see #01770 at INT 21/AX=6C00h)
  3918.     SDA extended file open mode = open mode for file (see INT 21/AX=6C00h)
  3919. Return: CF set on error
  3920.         AX = error code
  3921.     CF clear if successful
  3922.         CX = result code
  3923.         01h file opened
  3924.         02h file created
  3925.         03h file replaced (truncated)
  3926.         SFT initialized (except handle count, which DOS manages itself)
  3927. Note:    this function is called by the DOS 4.0+ kernel
  3928. BUG:    this function is not called correctly under some DOS versions
  3929.       (at least 5.0 and 6.2):
  3930.         the file attribute on the stack is not correct if the action
  3931.           code is 11h,
  3932.         the result code in CX is not passed back to the application.
  3933. SeeAlso: AX=1115h,AX=1116h,AX=1117h,INT 21/AX=6C00h
  3934. --------N-2F112F-----------------------------
  3935. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - IFS IOCTL
  3936.     AX = 112Fh
  3937.     SS = DOS DS
  3938.     STACK: WORD function in low byte
  3939.         00h ???
  3940.             DS:SI -> Current Directory Structure???
  3941.             CL = drive (1=A:)
  3942.         01h ???
  3943.             DS:SI -> ???
  3944.             CL = file handle???
  3945.         02h ???
  3946.             DS:SI -> Current Directory Structure???
  3947.             DI = ???
  3948.             CX = drive (1=A:)
  3949.     ???
  3950. Return: CF set on error
  3951.         AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  3952.     CF clear if successful
  3953. Note:    this function is called by the DOS 4.0 kernel
  3954. SeeAlso: INT 21/AH=6Bh
  3955. --------N-2F1130-----------------------------
  3956. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET IFSFUNC SEGMENT
  3957.     AX = 1130h
  3958. Return: ES = CS of resident IFSFUNC
  3959. --------N-2F1180-----------------------------
  3960. INT 2F - LAN Manager Enhanced DOS Services - ???
  3961.     AX = 1180h
  3962.     ???
  3963. Return: ???
  3964. SeeAlso: AX=1100h,AX=1181h,AX=118Eh
  3965. --------N-2F1181-----------------------------
  3966. INT 2F - LAN Manager Enhanced DOS Services - SET USER NAME???
  3967.     AX = 1181h
  3968.     ???
  3969. Return: ???
  3970. SeeAlso: AX=1100h,AX=1180h
  3971. --------N-2F1182-----------------------------
  3972. INT 2F - LAN Manager Enhanced DOS Services - INSTALL SERVICE
  3973.     AX = 1182h
  3974.     ???
  3975. Return: ???
  3976. SeeAlso: AX=1100h,AX=1180h
  3977. --------N-2F1184-----------------------------
  3978. INT 2F - LAN Manager Enhanced DOS - ???
  3979.     AX = 1184h
  3980.     ???
  3981. Return: ???
  3982. --------N-2F1186-----------------------------
  3983. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe
  3984.     AX = 1186h
  3985.     DS:SI -> stack frame (see #02607)
  3986. Return: CF clear if successful
  3987.     CF set if error
  3988.         AX = error code
  3989. Note:    LAN Manager enhance mode adds features beyond the standard redirector
  3990.       file/printer services
  3991. SeeAlso: AX=118Fh,AX=1190h,AX=1191h,INT 21/AX=5F39h
  3992.  
  3993. Format of LAN Manager DosReadAsynchNmPipe stack frame:
  3994. Offset    Size    Description    (Table 02607)
  3995.  00h    DWORD    -> number of bytes read
  3996.  04h    WORD    size of buffer
  3997.  06h    DWORD    -> buffer
  3998.  0Ah    DWORD    -> return code
  3999.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  4000.  12h    WORD    handle
  4001. --------N-2F118A-----------------------------
  4002. INT 2F - LAN Manager 2.0+ DOS Enhanced ENCRYPT.EXE - STREAM ENCRYPTION SERVICE
  4003.     AX = 118Ah
  4004.     BX = function (0000h or 0001h)
  4005. Return: CF clear if successful
  4006.         AX = 1100h success
  4007.     CF set if error
  4008.         AX = 0001h, etc.
  4009. SeeAlso: AX=1186h,AH=41h,AH=42h,AH=4Bh
  4010. --------N-2F118B-----------------------------
  4011. INT 2F - LAN Manager Enhanced DOS - ???
  4012.     AX = 118Bh
  4013.     ???
  4014. Return: ???
  4015. --------N-2F118C-----------------------------
  4016. INT 2F - LAN Manager Enhanced DOS - ???
  4017.     AX = 118Ch
  4018.     ???
  4019. Return: ???
  4020. --------N-2F118E-----------------------------
  4021. INT 2F - LAN Manager Enhanced DOS - ???
  4022.     AX = 118Eh
  4023.     ???
  4024. Return: ???
  4025. --------N-2F118F-----------------------------
  4026. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe
  4027.     AX = 118Fh
  4028.     DS:SI -> stack frame (see #02608)
  4029. Return: CF clear if successful
  4030.     CF set if error
  4031.         AX = error code
  4032. SeeAlso: AX=1186h,AX=1191h,INT 21/AX=5F3Ah
  4033.  
  4034. Format of LAN Manager DosReadAsynchNmPipe stack frame:
  4035. Offset    Size    Description    (Table 02608)
  4036.  00h    DWORD    -> number of bytes read
  4037.  04h    WORD    Size of buffer
  4038.  06h    DWORD    -> buffer
  4039.  0Ah    DWORD    -> return code
  4040.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  4041.  12h    WORD    handle
  4042. --------N-2F1190-----------------------------
  4043. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe2
  4044.     AX = 1190h
  4045.     DS:SI -> stack frame (see #02609)
  4046. Return: CF clear if successful
  4047.     CF set if error
  4048.         AX = error code
  4049. SeeAlso: AX=1186h,AX=1191h
  4050.  
  4051. Format of LAN Manager DosReadAsynchNmPipe2 stack frame:
  4052. Offset    Size    Description    (Table 02609)
  4053.  00h    DWORD    -> number of bytes read
  4054.  04h    WORD    size of buffer
  4055.  06h    DWORD    -> buffer
  4056.  0Ah    DWORD    -> return code
  4057.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  4058.  12h    WORD    handle
  4059.  14h    DWORD    ???
  4060. --------N-2F1191-----------------------------
  4061. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe2
  4062.     AX = 1191h
  4063.     DS:SI -> stack frame (see #02610)
  4064. Return: CF clear if successful
  4065.     CF set if error
  4066.         AX = error code
  4067. SeeAlso: AX=118Fh,AX=1190h,INT 21/AX=5F3Ah
  4068.  
  4069. Format of LAN Manager DosReadAsynchNmPipe2 stack frame:
  4070. Offset    Size    Description    (Table 02610)
  4071.  00h    DWORD    -> number of bytes read
  4072.  04h    WORD    size of buffer
  4073.  06h    DWORD    -> buffer
  4074.  0Ah    DWORD    -> return code
  4075.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  4076.  12h    WORD    handle
  4077.  14h    DWORD    ???
  4078. --------D-2F1200-----------------------------
  4079. INT 2F U - DOS 3.0+ internal - INSTALLATION CHECK
  4080.     AX = 1200h
  4081. Return: AL = FFh (for compatibility with other INT 2F functions)
  4082. --------D-2F1201-----------------------------
  4083. INT 2F U - DOS 3.0+ internal - CLOSE CURRENT FILE
  4084.     AX = 1201h
  4085.     SS = DOS DS = DOS kernel data seg (must be using a DOS internal stack)
  4086.     SDA current SFT pointer -> SFT of file to close
  4087. Return: CF set on error
  4088.     ES:DI -> SFT for file
  4089.     CX undefined (new reference count of SFT in many versions)
  4090.     BX destroyed
  4091. SeeAlso: AX=1106h,AX=1227h,INT 21/AH=3Eh
  4092. --------D-2F1202-----------------------------
  4093. INT 2F U - DOS 3.0+ internal - GET INTERRUPT ADDRESS
  4094.     AX = 1202h
  4095.     STACK: WORD vector number
  4096. Return: ES:BX -> interrupt vector (DWORD containing handler's address)
  4097.     STACK unchanged
  4098. --------D-2F1203-----------------------------
  4099. INT 2F U - DOS 3.0+ internal - GET DOS DATA SEGMENT
  4100.     AX = 1203h
  4101. Return: DS = data segment of IBMDOS.COM/MSDOS.SYS
  4102. Note:    for DOS prior to version 5.0, the data segment is the same as the code
  4103.       segment
  4104. --------D-2F1204-----------------------------
  4105. INT 2F U - DOS 3.0+ internal - NORMALIZE PATH SEPARATOR
  4106.     AX = 1204h
  4107.     STACK: WORD character to normalize
  4108. Return: AL = normalized character (forward slash turned to backslash, all
  4109.           others unchanged)
  4110.     ZF set if path separator
  4111.     STACK unchanged
  4112. --------D-2F1205-----------------------------
  4113. INT 2F U - DOS 3.0+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT
  4114.     AX = 1205h
  4115.     STACK: WORD character to output
  4116. Return: STACK unchanged
  4117. Note:    can be called only from within DOS
  4118. --------D-2F1206-----------------------------
  4119. INT 2F U - DOS 3.0+ internal - INVOKE CRITICAL ERROR
  4120.     AX = 1206h
  4121.     DI = error code
  4122.     BP:SI -> device driver header (see #01646)
  4123.     SS = DOS DS (must be using a DOS internal stack)
  4124.     STACK: WORD value to be passed to INT 24 in AX
  4125. Return: AL = 0-3 for Abort, Retry, Ignore, Fail
  4126.     STACK unchanged
  4127. SeeAlso: INT 24
  4128. --------D-2F1207-----------------------------
  4129. INT 2F U - DOS 3.0+ internal - MAKE DISK BUFFER MOST-RECENTLY USED
  4130.     AX = 1207h
  4131.     DS:DI -> disk buffer
  4132. Return: nothing
  4133. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  4134.       recently used is first); under DOS 3.3, the buffer is then moved to
  4135.       the start of the disk buffer chain if it was marked unused
  4136. Notes:    can be called only from within DOS
  4137.     this function is nearly the same as AX=120Fh
  4138. SeeAlso: AX=120Fh
  4139. --------D-2F1208-----------------------------
  4140. INT 2F U - DOS 3.0+ internal - DECREMENT SFT REFERENCE COUNT
  4141.     AX = 1208h
  4142.     ES:DI -> SFT
  4143. Return: AX = original value of reference count
  4144. Notes:    if the reference count was 1, it is set to FFFFh ("busy", since 0
  4145.       indicates that the SFT is not in use).  It is the caller's
  4146.       responsibility to set the reference count to zero after cleaning up.
  4147.     used by network redirectors such as MSCDEX
  4148. SeeAlso: AX=1106h
  4149. --------D-2F1209-----------------------------
  4150. INT 2F U - DOS 3.0+ internal - FLUSH AND FREE DISK BUFFER
  4151.     AX = 1209h
  4152.     DS:DI -> disk buffer
  4153. Return: disk buffer marked unused, contents written to disk if buffer dirty
  4154. Note:    can be called only from within DOS
  4155. SeeAlso: AX=120Eh,AX=1215h
  4156. --------D-2F120A-----------------------------
  4157. INT 2F U - DOS 3.0+ internal - PERFORM CRITICAL ERROR INTERRUPT
  4158.     AX = 120Ah
  4159.     DS = SS = DOS DS (must be using a DOS internal stack)
  4160.     STACK: WORD extended error code
  4161. Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail)
  4162.     CF clear if retry, set otherwise
  4163.     STACK unchanged
  4164. Notes:    can only be called during a DOS function call, as it uses various
  4165.       fields in the SDA to set up the registers for the INT 24
  4166.     reportedly sets current DPB's first root directory sector to 1
  4167. SeeAlso: INT 24
  4168. --------D-2F120B-----------------------------
  4169. INT 2F U - DOS 3.0+ internal - SIGNAL SHARING VIOLATION TO USER
  4170.     AX = 120Bh
  4171.     ES:DI -> system file table entry for previous open of file
  4172.     STACK: WORD extended error code (should be 20h--sharing violation)
  4173. Return: CF clear if operation should be retried
  4174.     CF set if operation should not be retried
  4175.         AX = error code (20h) (see #01680 at INT 21/AH=59h/BX=0000h)
  4176.     STACK unchanged
  4177. Notes:    can only be called during a DOS function call
  4178.     should only be called if an attempt was made to open an already-open
  4179.       file contrary to the sharing rules
  4180.     invokes INT 24 if SFT file opened via FCB or in compatibility mode with
  4181.       inheritance allowed
  4182. --------D-2F120C-----------------------------
  4183. INT 2F U - DOS 3.0+ internal - OPEN DEVICE AND SET SFT OWNER/MODE
  4184.     AX = 120Ch
  4185.     SDA current SFT pointer -> SFT for file
  4186.     DS = DOS DS
  4187.     SS = DOS DS (must be using a DOS internal stack)
  4188. Return: ES, DI, AX destroyed
  4189. Notes:    invokes "device open" call on device driver for SFT
  4190.     changes owner of last-accessed SFT to calling process if it was opened
  4191.       via FCB
  4192.     called by network redirectors such as MSCDEX
  4193. --------D-2F120D-----------------------------
  4194. INT 2F U - DOS 3.0+ internal - GET DATE AND TIME
  4195.     AX = 120Dh
  4196.     SS = DOS DS (must be using a DOS internal stack)
  4197. Return: AX = current date in packed format (see #01666 at INT 21/AX=5700h)
  4198.     DX = current time in packed format (see #01665 at INT 21/AX=5700h)
  4199. SeeAlso: INT 21/AH=2Ah,INT 21/AH=2Ch
  4200. --------D-2F120E-----------------------------
  4201. INT 2F U - DOS 3.0+ internal - MARK ALL DISK BUFFERS UNREFERENCED
  4202.     AX = 120Eh
  4203.     SS = DOS DS (must be using a DOS internal stack)
  4204. Return: DS:DI -> first disk buffer
  4205. Notes:    clears "referenced" flag on all disk buffers
  4206.     in DOS 5+, this has become essentially a NOP, invoking the same code
  4207.       used by AX=1224h (SHARING DELAY)
  4208. SeeAlso: AX=1209h,AX=1210h,INT 21/AH=0Dh
  4209. --------D-2F120F-----------------------------
  4210. INT 2F U - DOS 3.0+ internal - MAKE BUFFER MOST RECENTLY USED
  4211.     AX = 120Fh
  4212.     DS:DI -> disk buffer
  4213.     SS = DOS DS (must be using a DOS internal stack)
  4214. Return: DS:DI -> next buffer in buffer list
  4215. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  4216.       recently used is first); under DOS 3.3, the buffer is then moved to
  4217.       the start of the disk buffer chain if it was marked unused
  4218. Note:    this function is the same as AX=1207h except that it returns a
  4219.       pointer to the buffer following the specified buffer in the buffer
  4220.       chain
  4221. SeeAlso: AX=1207h
  4222. --------D-2F1210-----------------------------
  4223. INT 2F U - DOS 3.0+ internal - FIND UNREFERENCED DISK BUFFER
  4224.     AX = 1210h
  4225.     DS:DI -> first disk buffer to check
  4226. Return: ZF clear if found
  4227.         DS:DI -> first unreferenced disk buffer
  4228.     ZF set if not found
  4229. Note:    in DOS 5+, this has become essentially a NOP, invoking the same code
  4230.       used by AX=1224h (SHARING DELAY)
  4231. SeeAlso: AX=120Eh
  4232. --------D-2F1211-----------------------------
  4233. INT 2F U - DOS 3.0+ internal - NORMALIZE ASCIZ FILENAME
  4234.     AX = 1211h
  4235.     DS:SI -> ASCIZ filename to normalize
  4236.     ES:DI -> buffer for normalized filename
  4237. Return: destination buffer filled with uppercase filename, with slashes turned
  4238.     to backslashes
  4239. SeeAlso: AX=121Eh,AX=1221h
  4240. --------D-2F1212-----------------------------
  4241. INT 2F U - DOS 3.0+ internal - GET LENGTH OF ASCIZ STRING
  4242.     AX = 1212h
  4243.     ES:DI -> ASCIZ string
  4244. Return: CX = length of string
  4245. SeeAlso: AX=1225h
  4246. --------D-2F1213-----------------------------
  4247. INT 2F U - DOS 3.0+ internal - UPPERCASE CHARACTER
  4248.     AX = 1213h
  4249.     STACK: WORD character to convert to uppercase
  4250. Return: AL = uppercase character
  4251.     STACK unchanged
  4252. --------D-2F1214-----------------------------
  4253. INT 2F U - DOS 3.0+ internal - COMPARE FAR POINTERS
  4254.     AX = 1214h
  4255.     DS:SI = first pointer
  4256.     ES:DI = second pointer
  4257. Return: ZF set if pointers are equal, ZF clear if not equal
  4258.     CF clear if pointers equal, CF set if not
  4259. --------D-2F1215-----------------------------
  4260. INT 2F U - DOS 3.0+ internal - FLUSH BUFFER
  4261.     AX = 1215h
  4262.     DS:DI -> disk buffer
  4263.     SS = DOS DS (must be using a DOS internal stack)
  4264.     STACK: WORD drives for which to skip buffer
  4265.         ignore buffer if drive same as high byte, or bytes differ and
  4266.           the buffer is for a drive OTHER than that given in low byte
  4267. Return: STACK unchanged
  4268. Note:    can be called only from within DOS
  4269. SeeAlso: AX=1209h
  4270. --------D-2F1216-----------------------------
  4271. INT 2F U - DOS 3.0+ internal - GET ADDRESS OF SYSTEM FILE TABLE ENTRY
  4272.     AX = 1216h
  4273.     BX = system file table entry number
  4274. Return: CF clear if successful
  4275.         ES:DI -> system file table entry
  4276.         BX = relative entry number in system file table containing entry
  4277.         AX destroyed
  4278.     CF set if BX greater than FILES=
  4279. Note:    supported by DR DOS 5+
  4280. SeeAlso: AX=1220h
  4281. --------D-2F1217-----------------------------
  4282. INT 2F U - DOS 3.0+ internal - GET CURRENT DIRECTORY STRUCTURE FOR DRIVE
  4283.     AX = 1217h
  4284.     SS = DOS DS (must be using a DOS internal stack)
  4285.     STACK: WORD drive (0 = A:, 1 = B:, etc)
  4286. Return: CF set on error
  4287.         (drive > LASTDRIVE)
  4288.     CF clear if successful
  4289.         DS:SI -> current directory structure for specified drive
  4290.     STACK unchanged
  4291. SeeAlso: AX=1219h
  4292. --------D-2F1218-----------------------------
  4293. INT 2F U - DOS 3.0+ internal - GET CALLER'S REGISTERS
  4294.     AX = 1218h
  4295. Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack)
  4296. Note:    only valid while within DOS
  4297. --------D-2F1219-----------------------------
  4298. INT 2F U - DOS 3.0+ internal - SET DRIVE???
  4299.     AX = 1219h
  4300.     SS = DOS DS (must be using a DOS internal stack)
  4301.     STACK: WORD drive (0 = default, 1 = A:, etc)
  4302. Return: ???
  4303.     STACK unchanged
  4304. Notes:    calls AX=1217h
  4305.     builds a current directory structure if inside server call
  4306.       (INT 21/AX=5D00h)
  4307. SeeAlso: AX=1217h,AX=121Fh
  4308. --------D-2F121A-----------------------------
  4309. INT 2F U - DOS 3.0+ internal - GET FILE'S DRIVE
  4310.     AX = 121Ah
  4311.     DS:SI -> filename
  4312. Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
  4313.     DS:SI -> filename without leading X: (if present)
  4314. SeeAlso: INT 21/AH=19h,INT 21/AH=60h
  4315. --------D-2F121B-----------------------------
  4316. INT 2F U - DOS 3.0+ internal - SET YEAR/LENGTH OF FEBRUARY
  4317.     AX = 121Bh
  4318.     CL = year - 1980
  4319. Return: AL = number of days in February
  4320. Note:    requires DS to be set to the DOS data segment
  4321. SeeAlso: INT 21/AH=2Bh"DATE"
  4322. --------D-2F121C-----------------------------
  4323. INT 2F U - DOS 3.0+ internal - CHECKSUM MEMORY
  4324.     AX = 121Ch
  4325.     DS:SI -> start of memory to checksum
  4326.     CX = number of bytes
  4327.     DX = initial checksum
  4328.     SS = DOS DS (must be using a DOS internal stack)
  4329. Return: AX, CX destroyed
  4330.     DX = checksum
  4331.     DS:SI -> first byte after checksummed range
  4332. Notes:    used by DOS to determine day count since 1/1/80 given a date
  4333.     supported by DR DOS 5.0+
  4334. SeeAlso: AX=121Dh
  4335. --------D-2F121D-----------------------------
  4336. INT 2F U - DOS 3.0+ internal - SUM MEMORY
  4337.     AX = 121Dh
  4338.     DS:SI -> memory to add up
  4339.     CX = 0000h
  4340.     DX = limit
  4341. Return: AL = byte which exceeded limit
  4342.     CX = number of bytes before limit exceeded
  4343.     DX = remainder after adding first CX bytes
  4344.     DS:SI -> byte beyond the one which exceeded the limit
  4345. Notes:    used by DOS to determine year or month given day count since 1/1/80
  4346.     supported by DR DOS 5.0+
  4347. SeeAlso: AX=121Ch
  4348. --------D-2F121E-----------------------------
  4349. INT 2F U - DOS 3.0+ internal - COMPARE FILENAMES
  4350.     AX = 121Eh
  4351.     DS:SI -> first ASCIZ filename
  4352.     ES:DI -> second ASCIZ filename
  4353. Return: ZF set if filenames equivalent, ZF clear if not
  4354. Note:    supported by DR DOS 5.0+
  4355. SeeAlso: AX=1211h,AX=1221h
  4356. --------D-2F121F-----------------------------
  4357. INT 2F U - DOS 3.0+ internal - BUILD CURRENT DIRECTORY STRUCTURE
  4358.     AX = 121Fh
  4359.     SS = DOS DS (must be using a DOS internal stack)
  4360.     STACK: WORD drive letter
  4361. Return: ES:DI -> current directory structure (will be overwritten by next call)
  4362.     STACK unchanged
  4363. --------D-2F1220-----------------------------
  4364. INT 2F U - DOS 3.0+ internal - GET JOB FILE TABLE ENTRY
  4365.     AX = 1220h
  4366.     BX = file handle
  4367. Return: CF set on error
  4368.         AL = 6 (invalid file handle)
  4369.     CF clear if successful
  4370.         ES:DI -> JFT entry for file handle in current process
  4371. Notes:    the byte pointed at by ES:DI contains the number of the SFT for the
  4372.       file handle, or FFh if the handle is not open
  4373.     supported by DR DOS 5.0+
  4374. SeeAlso: AX=1216h,AX=1229h
  4375. --------D-2F1221-----------------------------
  4376. INT 2F U - DOS 3.0+ internal - CANONICALIZE FILE NAME
  4377.     AX = 1221h
  4378.     DS:SI -> file name to be fully qualified
  4379.     ES:DI -> 128-byte buffer for resulting canonical file name
  4380.     SS = DOS DS (must be using a DOS internal stack)
  4381. Return: (see INT 21/AH=60h)
  4382. Note:    identical to INT 21/AH=60h
  4383. SeeAlso: AX=1123h,INT 21/AH=60h
  4384. --------D-2F1222-----------------------------
  4385. INT 2F U - DOS 3.0+ internal - SET EXTENDED ERROR INFO
  4386.     AX = 1222h
  4387.     SS = DOS data segment
  4388.     SS:SI -> 4-byte records
  4389.         BYTE    error code, FFh = last record
  4390.         BYTE    error class, FFh = don't change
  4391.         BYTE    suggested action, FFh = don't change
  4392.         BYTE    error locus, FFh = don't change
  4393.     SDA error code set
  4394. Return: SI destroyed
  4395.     SDA error class, error locus, and suggested action fields set
  4396. Note:    can be called only from within DOS
  4397. SeeAlso: AX=122Dh,INT 21/AH=59h/BX=0000h,INT 21/AX=5D0Ah
  4398. --------D-2F1223-----------------------------
  4399. INT 2F U - DOS 3.0+ internal - CHECK IF CHARACTER DEVICE
  4400.     AX = 1223h
  4401.     DS = DOS DS
  4402.     SS = DOS DS (must be using a DOS internal stack)
  4403.     SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name
  4404.     SDA+22Bh (DOS 4.0-6.0) = eight-character blank-padded name
  4405.     SDA file attribute field set
  4406.     direction flag clear (i.e. CLD)
  4407. Return: CF set if no character device by that name found
  4408.     CF clear if found
  4409.         BH bits 4-0 copied from low byte of device attribute word
  4410.         BH bit 5 set, bits 7-6 clear
  4411. Notes:    can only be called from within DOS
  4412.     the check is skipped (always says "not device") if the volume ID bit
  4413.       of the file attribute field is set on entry
  4414. SeeAlso: INT 21/AX=5D06h,INT 21/AX=5D0Bh
  4415. --------D-2F1224-----------------------------
  4416. INT 2F U - DOS 3.0+ internal - SHARING RETRY DELAY
  4417.     AX = 1224h
  4418.     SS = DOS DS (must be using a DOS internal stack)
  4419. Return: after delay set by INT 21/AX=440Bh, unless in server call
  4420.       (INT 21/AX=5D00h)
  4421. Note:    delay is dependent on the processor speed, and is skipped entirely if
  4422.       inside a server call
  4423. SeeAlso: INT 21/AX=440Bh,INT 21/AH=52h,INT 62/AX=0097h
  4424. --------D-2F1225-----------------------------
  4425. INT 2F U - DOS 3.0+ internal - GET LENGTH OF ASCIZ STRING
  4426.     AX = 1225h
  4427.     DS:SI -> ASCIZ string
  4428. Return: CX = length of string
  4429. Note:    supported by DR DOS 5.0+
  4430. SeeAlso: AX=1212h
  4431. --------D-2F1226-----------------------------
  4432. INT 2F U - DOS 3.3+ internal - OPEN FILE
  4433.     AX = 1226h
  4434.     CL = access mode
  4435.     DS:DX -> ASCIZ filename
  4436.     SS = DOS DS (must be using a DOS internal stack)
  4437. Return: CF set on error
  4438.         AL = error code (see #01680 at INT 21/AH=59h/BX=0000h)
  4439.     CF clear if successful
  4440.         AX = file handle
  4441. Notes:    can only be called from within DOS
  4442.     equivalent to INT 21/AH=3Dh
  4443.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  4444. SeeAlso: AX=1227h,INT 21/AH=3Dh
  4445. --------D-2F1227-----------------------------
  4446. INT 2F U - DOS 3.3+ internal - CLOSE FILE
  4447.     AX = 1227h
  4448.     BX = file handle
  4449.     SS = DOS DS (must be using a DOS internal stack)
  4450. Return: CF set on error
  4451.         AL = 06h invalid file handle
  4452.     CF clear if successful
  4453. Notes:    can only be called from within DOS
  4454.     equivalent to INT 21/AH=3Eh
  4455.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  4456. SeeAlso: AX=1106h,AX=1201h,AX=1226h,INT 21/AH=3Eh
  4457. --------D-2F1228BP4200-----------------------
  4458. INT 2F U - DOS 3.3+ internal - MOVE FILE POINTER
  4459.     AX = 1228h
  4460.     BP = 4200h, 4201h, 4202h (see INT 21/AH=42h)
  4461.     BX = file handle
  4462.     CX:DX = offset in bytes
  4463.     SS = DOS DS (must be using a DOS internal stack)
  4464. Return: as for INT 21/AH=42h
  4465. Notes:    equivalent to INT 21/AH=42h, but may only be called from inside a DOS
  4466.       function call
  4467.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  4468.       LSEEK, and restores frame pointer
  4469.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  4470. SeeAlso: INT 21/AH=42h
  4471. --------D-2F1229-----------------------------
  4472. INT 2F U - DOS 3.3+ internal - READ FROM FILE
  4473.     AX = 1229h
  4474.     BX = file handle
  4475.     CX = number of bytes to read
  4476.     DS:DX -> buffer
  4477.     SS = DOS DS (must be using a DOS internal stack)
  4478. Return: as for INT 21/AH=3Fh"DOS"
  4479. Notes:    equivalent to INT 21/AH=3Fh, but may only be called when already inside
  4480.       a DOS function call
  4481.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  4482. SeeAlso: AX=1226h,INT 21/AH=3Fh"DOS"
  4483. --------D-2F122A-----------------------------
  4484. INT 2F U - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
  4485.     AX = 122Ah
  4486.     BX = entry point to set (0001h or 0002h)
  4487.     DS:SI -> FASTOPEN entry point (see #02611,#02612)
  4488.         (entry point not set if SI = FFFFh for DOS 4.0+)
  4489. Return: CF set if specified entry point already set
  4490. Notes:    entry point in BX is ignored under DOS 3.30
  4491.     both entry points set to same handler by DOS 4.01
  4492.     DOS 5.0 and 6.0 only set entry point 1
  4493.  
  4494. (Table 02611)
  4495. Values DOS 3.30+ FASTOPEN entry point is called with:
  4496.     AL = 01h  Lookup
  4497.         CX = ??? seems to be offset
  4498.         DI = ??? seems to be offset
  4499.         SI = offset in DOS DS of filename
  4500.     AL = 02h  insert file into FASTOPEN cache
  4501.     AL = 03h  delete file from FASTOPEN cache
  4502.         SI = offset in DOS DS of filename
  4503.     AL = 04h  purge FASTOPEN cache
  4504.         AH = subfunction (00h,01h,02h)
  4505.         ES:DI -> ???
  4506.         CX = ??? (subfunctions 01h and 02h only)
  4507. Returns: CF set on error or not installed
  4508. Note: function 03h calls function 01h first
  4509. SeeAlso: #02612,#02613
  4510.  
  4511. (Table 02612)
  4512. Values PC-DOS 4.01 FASTOPEN is additionally called with:
  4513.     AL = 04h ???
  4514.         AH = 03h
  4515.         ???
  4516.     AL = 05h ???
  4517.     AL = 0Bh ???
  4518.     AL = 0Ch ???
  4519.     AL = 0Dh ???
  4520.     AL = 0Eh ???
  4521.     AL = 0Fh ???
  4522.     AL = 10h ???
  4523. SeeAlso: #02611,#02613
  4524.  
  4525. (Table 02613)
  4526. Values MS-DOS 5.0-6.0 FASTOPEN is additionally called with:
  4527.     AL = 04h  purge FASTOPEN cache
  4528.         AH = 03h
  4529.         ???
  4530.     AL = 05h ???
  4531.         DL = drive (00h = A:)
  4532.         ???
  4533.     AL = 06h ???
  4534.         ???
  4535. SeeAlso: #02611,#02612
  4536. --------D-2F122B-----------------------------
  4537. INT 2F U - DOS 3.3+ internal - IOCTL
  4538.     AX = 122Bh
  4539.     BP = 44xxh
  4540.     SS = DOS DS (must be using a DOS internal stack)
  4541.     additional registers as appropriate for INT 21/AX=44xxh
  4542. Return: as for INT 21/AH=44h
  4543. Notes:    equivalent to INT 21/AH=44h, but may only be called when already inside
  4544.       a DOS function call
  4545.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  4546.       IOCTL, and restores frame pointer
  4547.     used by NLSFUNC in accessing COUNTRY.SYS when invoked by the DOS kernel
  4548. SeeAlso: INT 21/AH=44h
  4549. --------D-2F122C-----------------------------
  4550. INT 2F U - DOS 3.3+ internal - GET DEVICE CHAIN
  4551.     AX = 122Ch
  4552. Return: BX:AX -> header of second device driver (NUL is first) in driver chain
  4553. Note:    although this function exists in DR DOS 5.0 and Novell DOS 7, it
  4554.       always returns 0000h:0000h prior to Novell DOS 7 Update 15
  4555. SeeAlso: INT 21/AH=52h
  4556. --------D-2F122D-----------------------------
  4557. INT 2F U - DOS 3.3+ internal - GET EXTENDED ERROR CODE
  4558.     AX = 122Dh
  4559.     SS = DOS DS
  4560. Return: AX = current extended error code
  4561. SeeAlso: AX=1222h,INT 21/AH=59h/BX=0000h
  4562. --------D-2F122E-----------------------------
  4563. INT 2F U - DOS 4.0+ internal - GET OR SET ERROR TABLE ADDRESSES
  4564.     AX = 122Eh
  4565.     DL = subfunction
  4566.         00h get standard DOS error table (see #02614)
  4567.         Return: ES:DI -> error table
  4568.                  (DOS 4: errors 00h-12h,50h-5Bh)
  4569.                  (DOS 5: errors 00h-26h,4Fh,51h-59h)
  4570.         01h set standard DOS error table
  4571.         ES:DI -> error table
  4572.         02h get parameter error table (errors 00h-0Ah)
  4573.         Return: ES:DI -> error table
  4574.         03h set parameter error table
  4575.         ES:DI -> error table
  4576.         04h get critical/SHARE error table (errors 13h-2Bh)
  4577.         Return: ES:DI -> error table
  4578.         05h set critical/SHARE error table
  4579.         ES:DI -> error table
  4580.         06h get ??? error table
  4581.         Return: ES:DI -> error table or 0000h:0000h
  4582.         07h set ??? error table
  4583.         ES:DI -> error table
  4584.         08h get error message retriever (see #02615)
  4585.         Return: ES:DI -> FAR procedure to fetch error message
  4586.         09h set ??? error table
  4587.         ES:DI -> error table
  4588. Notes:    if the returned segment on a "get" is 0001h, then the offset specifies
  4589.       the offset of the error message table within COMMAND.COM, and the
  4590.       procedure returned by DL=08h should be called
  4591.     DOS 5+ COMMAND.COM does not allow setting any of the addresses (calls
  4592.       with DL odd are ignored); they are always returned with segment 0001h
  4593.     for DOS 5.0, the standard and critical/SHARE error tables are combined
  4594.       into a single error table
  4595. SeeAlso: AX=0500h,INT 21/AH=59h/BX=0000h
  4596.  
  4597. Format of DOS 4.x error table:
  4598. Offset    Size    Description    (Table 02614)
  4599.  00h    BYTE    FFh
  4600.  01h  2 BYTEs    04h,00h (DOS version???)
  4601.  03h    BYTE    number of error headers following
  4602.  04h 2N WORDs    table of all error headers for table
  4603.         Offset    Size    Description
  4604.          00h    WORD    error message number
  4605.          02h    WORD    offset of error message from start of header
  4606.                 error messages are count byte followed by msg
  4607. Note:    DOS 5 error tables consist of one word per error number; each word
  4608.       contains either the offset of a counted string or 0000h
  4609.  
  4610. (Table 02615)
  4611. Call error retrieval function with:
  4612.     AX = error number (see #02616)
  4613.     DI = offset of error table
  4614. Return: ES:DI -> error message (counted string)
  4615. Notes:    this function needs to access COMMAND.COM if the messages were not
  4616.       loaded into memory permanently with /MSG; the caller should assume
  4617.       that the returned message will be overwritten by the next call of
  4618.       the function
  4619.     supported by DR DOS 5.0
  4620.  
  4621. (Table 02616)
  4622. Values for parameter errors:
  4623.  01h    Too many parameters
  4624.  02h    Required Parameter missing
  4625.  03h    Invalid switch
  4626.  04h    Invalid keyword
  4627.  06h    Parameter value not in allowed range
  4628.  07h    Parameter value not allowed
  4629.  08h    Parameter value not allowed
  4630.  09h    Parameter format not correct
  4631.  0Ah    Invalid parameter
  4632.  0Bh    Invalid parameter combination
  4633. --------D-2F122F-----------------------------
  4634. INT 2F U - DOS 4.x internal - SET DOS VERSION NUMBER TO RETURN
  4635.     AX = 122Fh
  4636.     DX = DOS version number (0000h = return true DOS version)
  4637. Notes:    not available under DR DOS 5.0 or 6.0, or Novell DOS 7
  4638.     supported by FREEVER.COM, a freeware DOS version faking TSR by Matthias
  4639.       Paul
  4640. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h,INT 2F/AX=E000h"SETDRVER"
  4641. ----------2F1230-----------------------------
  4642. INT 2F U - Windows95 - FIND SFT ENTRY IN INTERNAL FILE TABLES
  4643.     AX = 1230h
  4644.     ES:DI -> SFT entry
  4645. Return: CF clear if SFT found in internal table
  4646.     CF set if SFT not in any internal file table
  4647.         AX = 0000h
  4648.         SI:CX = 32-bit starting cluster number for directory
  4649.         DX = directory entry number
  4650.         BX = index into new file system table
  4651. Note:    the new file system table from which the return values are taken is
  4652.       reported to be statically allocated with 20 entries, and used only
  4653.       for FCB calls
  4654. BUG:    Win95-OSR2 is reported to have a bug that can potentially corrupt
  4655.       memory if SFT tables are "arranged poorly"
  4656. SeeAlso: AX=1231h,AX=1200h
  4657. ----------2F1231-----------------------------
  4658. INT 2F U - Windows95 - SET/CLEAR "REPORT WINDOWS TO DOS PROGRAMS" FLAG
  4659.     AX = 1231h
  4660.     DL = function
  4661.         00h set byte after "IsWIN386" to 01h
  4662.         01h set "IsWIN386" bit 1
  4663.         02h clear "IsWIN386" bit 1
  4664.         else
  4665.         Return:    CF set
  4666.             AX = 0001h
  4667. Return: CF clear
  4668.     AX = 0000h
  4669. BUG:    Windows98 will crash the system if DL>02h on entry due to an off-by-1
  4670.       conditional jump; if the jump were correct, the function would return
  4671.       CF set/AX=0001h as for Windows95
  4672. SeeAlso: AX=1230h,AX=1200h
  4673. --------O-2F12FFBL00-------------------------
  4674. INT 2F - FreeDOS - FDAK-DDT - INSTALLATION CHECK / STATUS CHECK
  4675.     AX = 12FFh
  4676.     BL = 00h
  4677. Return: AL = DDh if installed
  4678.         BH = state (00h disabled, nonzero enabled)
  4679.         BL = readonly flag (00h writable, nonzero read-only)
  4680. Program: FDAK-DDT is the FreeDOS Alternative Kernel Device Drivers Testing
  4681.       release by Yury A. Semenov
  4682. SeeAlso: AX=12FFh/BL=07h
  4683. --------O-2F12FFBL01-------------------------
  4684. INT 2F - FreeDOS - FDAK-DDT - ENABLE FDAK DRIVERS
  4685.     AX = 12FFh
  4686.     BL = 01h
  4687. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=02h
  4688. --------O-2F12FFBL02-------------------------
  4689. INT 2F - FreeDOS - FDAK-DDT - DISABLE FDAK DRIVERS
  4690.     AX = 12FFh
  4691.     BL = 02h
  4692. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=01h
  4693. --------O-2F12FFBL03-------------------------
  4694. INT 2F - FreeDOS - FDAK-DDT - SWITCH BLOCK DEVICE TO READ-ONLY
  4695.     AX = 12FFh
  4696.     BL = 03h
  4697.     ???
  4698. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=04h
  4699. --------O-2F12FFBL04-------------------------
  4700. INT 2F - FreeDOS - FDAK-DDT - SWITCH BLOCK DEVICE TO READ-WRITE
  4701.     AX = 12FFh
  4702.     BL = 04h
  4703.     ???
  4704. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=03h
  4705. --------O-2F12FFBL05-------------------------
  4706. INT 2F - FreeDOS - FDAK-DDT - TURN ACTIVITY INDICATOR ON
  4707.     AX = 12FFh
  4708.     BL = 05h
  4709. Note:    not yet implemented as of January 1996
  4710. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=06h
  4711. --------O-2F12FFBL06-------------------------
  4712. INT 2F - FreeDOS - FDAK-DDT - TURN ACTIVITY INDICATOR OFF
  4713.     AX = 12FFh
  4714.     BL = 06h
  4715. Note:    not yet implemented as of January 1996
  4716. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=05h
  4717. --------O-2F12FFBL07-------------------------
  4718. INT 2F - FreeDOS - FDAK-DDT - UNINSTALL
  4719.     AX = 12FFh
  4720.     BL = 07h
  4721. Return: ES = segment of FDAK memory block
  4722. Note:    the caller must free the memory block returned in ES
  4723.       (via INT 21/AH=49h)
  4724. SeeAlso: AX=12FFh/BL=00h
  4725. --------O-2F12FFBX0005-----------------------
  4726. INT 2F U - Novell DOS 7 - GET/SET/QUERY MEMORY STATE???
  4727.     AX = 12FFh
  4728.     BX = 0005h
  4729.     CX = 0000h
  4730.     DX = function
  4731.         0000h ???
  4732.         0001h ???
  4733. Note:    called at three separate points inside IBMBIO.COM
  4734. --------m-2F12FFBX0006-----------------------
  4735. INT 2F U - DR DOS 6, Novell DOS 7 - EMM386.EXE - VIDEO MEMORY SPACE CONTROL
  4736.     AX = 12FFh
  4737.     BX = 0006h
  4738.     DX = 0000h
  4739.     CX = function
  4740.         0000h get status of video memory space (MEMMAX /V)
  4741.         0001h map memory into video memory space (MEMMAX +V)
  4742.         0002h unmap memory from video memory space (MEMMAX -V)
  4743. Return: CF clear if successful
  4744.         AX = 0000h (successful)
  4745.         BX = segment of reserved video RAM
  4746.         CX = segment of used video RAM
  4747.         DX = segment of first upper MCB
  4748. Notes:    this functionality is provided by EMM386, and partially supported by
  4749.       HIDOS.SYS
  4750.     BL specifies which program handles the call, BH is the function number
  4751. BUG:    4DOS 5.51(a) often hangs the system (reported to be reproducable), if
  4752.       MEMMAX +V is issued from the 4DOS prompt.  To avoid this, one should
  4753.       temporary load COMMAND.COM followed by MEMMAX +v , starting the
  4754.       application, MEMMAX -v and EXIT.  4DOS 5.5c does not show this
  4755.       phenomena on the same systems where 5.51a hangs.
  4756. SeeAlso: AX=D201h/BX=4849h
  4757. --------O-2F12FFBX0000-----------------------
  4758. INT 2F U - Novell DOS 7 - GET ???
  4759.     AX = 12FFh
  4760.     BX = 0000h
  4761. Return: AX = 0000h if supported
  4762.     DX = ??? (internal data)
  4763. SeeAlso: AX=12FFh/BX=0001h
  4764. --------O-2F12FFBX0001-----------------------
  4765. INT 2F U - Novell DOS 7 - SET ???
  4766.     AX = 12FFh
  4767.     BX = 0001h
  4768.     DX = new value for ???
  4769. Return: AX = 0000h if supported
  4770. SeeAlso: AX=12FFh/BX=0000h
  4771. --------O-2F12FFBX0002-----------------------
  4772. INT 2F U - Novell DOS 7 - GET ??? SIZE
  4773.     AX = 12FFh
  4774.     BX = 0002h
  4775. Return: AX = 0000h if supported
  4776.     DX = size of/required-for ??? in paragraphs
  4777. SeeAlso: AX=12FFh/BX=0003h
  4778. --------O-2F12FFBX0003-----------------------
  4779. INT 2F U - Novell DOS 7 - SET ???
  4780.     AX = 12FFh
  4781.     BX = 0003h
  4782.     DX = new value for ???
  4783. Return: AX = 0000h if supported
  4784. SeeAlso: AX=12FFh/BX=0002h
  4785. --------O-2F12FFBX0007-----------------------
  4786. INT 2F U - Novell DOS 7 - SCRIPT.EXE - GET ???
  4787.     AX = 12FFh
  4788.     BX = 0007h
  4789.     CX = 0000h
  4790. Return: CF clear if installed
  4791.         AX = 0000h
  4792.         BX = ??? (4426h)
  4793.         CX = ??? (0068h)
  4794.         DX = PSP segment of resident code???
  4795.         SI = ??? (4AFAh)
  4796.         ES = resident code segment
  4797. --------O-2F12FFBX0009-----------------------
  4798. INT 2F U - Novell DOS 7 - SET ???
  4799.     AX = 12FFh
  4800.     BX = 0009h
  4801.     DX = new value for ???
  4802. Return: ???
  4803. Note:    the DX value is stored at offset 66h in SYSVARS and offset 18h in
  4804.       the Novell DOS 7 internal variable table
  4805. --------m-2F12FFBX0106-----------------------
  4806. INT 2F U - Novell DOS 7 - EMM386.EXE - GET VERSION???
  4807.     AX = 12FFh
  4808.     BX = 0106h
  4809. Return: CF clear if successful
  4810.         AX = 0000h (successful)
  4811.         BX = EDC0h (signature)
  4812.         CL = memory manager variant (02h,03h)
  4813.         (02h when DPMI/VCPI disabled, 03h when DPMI/VCPI loaded)
  4814.         CH = ??? (00h)
  4815.         DX = version??? (0300h for v3.0)
  4816.         ES = segment of EMM386 low-memory stub
  4817. Notes:    BL specifies which program handles the call, BH is the function number
  4818.     if the word at ES:0012h is nonzero, if contains the offset within
  4819.       segment ES of the CEMM-compatible entry point (see #02617)
  4820.     if no other program has hooked INT 67, an alternate installation
  4821.       check is to test for the string
  4822.       "NOVELL EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
  4823.       handler's segment; the word immediately preceding this string
  4824.       contains the offset of the API entry point if it is nonzero
  4825. Index:    entry point;Novell EMM386
  4826.  
  4827. (Table 02617)
  4828. Call Novell EMM386.EXE entry point with:
  4829.     AH = 00h get memory manager's status???
  4830.         ???
  4831.     AH = 01h set memory manager's status???
  4832.         ???
  4833.     AH = 02h Weitek coprocessor support???
  4834.         AL = subfunction???
  4835.     more functions???
  4836. SeeAlso: #01513 at INT 21/AX=4402h/SF=02h,#03666 at INT 67/AX=FFA5h
  4837. --------m-2F12FFBL06-------------------------
  4838. INT 2F U - Novell DOS 7 - EMM386.EXE - ???
  4839.     AX = 12FFh
  4840.     BL = 06h
  4841.     BH = function (02h-09h)
  4842.     ???
  4843. Return: ???
  4844. --------O-2F12FFBX0EDC-----------------------
  4845. INT 2F U - Novell DOS 7 - EMM386.EXE - CHECK IF MULTITASKING SUPPORT LOADED???
  4846.     AX = 12FFh
  4847.     BX = 0EDCh ('EDC' = Novell European Development Center)
  4848. Return: AX = 0000h if ??? loaded
  4849.         CF clear
  4850.         BX = 0000h
  4851. Notes:    called by Novell DOS 7 TaskMgr
  4852.     if this function returns with AX=0000h, then the code necessary to
  4853.       support the API on INT 2F/AX=2780h is loaded and that API becomes
  4854.       available for use
  4855.     because the request is handled on the initial trap to the memory
  4856.       manager caused by INT instructions, this function must be invoked
  4857.       with an actual INT 2F instruction instead of some simulation such
  4858.       as a far call to the address in the interrupt vector table
  4859. SeeAlso: AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h,AX=2780h/CL=04h
  4860. --------D-2F13-------------------------------
  4861. INT 2F U - DOS 3.2+ - SET DISK INTERRUPT HANDLER
  4862.     AH = 13h
  4863.     DS:DX -> interrupt handler disk driver calls on read/write
  4864.     ES:BX = address to restore INT 13 to on system halt (exit from root
  4865.          shell) or warm boot (INT 19)
  4866. Return: DS:DX set by previous invocation of this function
  4867.     ES:BX set by previous invocation of this function
  4868. Notes:    IO.SYS hooks INT 13 and inserts one or more filters ahead of the
  4869.       original INT 13 handler.  The first is for disk change detection
  4870.       on floppy drives, the second is for tracking formatting calls and
  4871.       correcting DMA boundary errors, the third is for working around
  4872.       problems in a particular version of IBM's ROM BIOS
  4873.     before the first call, ES:BX points at the original BIOS INT 13; DS:DX
  4874.       also points there unless IO.SYS has installed a special filter for
  4875.       hard disk reads (on systems with model byte FCh and BIOS date
  4876.       "01/10/84" only), in which case it points at the special filter
  4877.     most DOS 3.2+ disk access is via the vector in DS:DX, although a few
  4878.       functions are still invoked via an INT 13 instruction
  4879.     this is a dangerous security loophole for any virus-monitoring software
  4880.       which does not trap this call ("INT13", "Nomenklatura", and many
  4881.       Bulgarian viruses are known to use it to get the original ROM entry
  4882.       point)
  4883. SeeAlso: INT 13/AH=01h,INT 19,INT 9D"VIRUS"
  4884. --------N-2F13-------------------------------
  4885. INT 2F U - MS-NET - ???
  4886.     AH = 13h
  4887.     ???
  4888. Return: ???
  4889. Note:    supposedly used to move (or control the movement of) NCBs
  4890. --------U-2F1400-----------------------------
  4891. INT 2F C - NLSFUNC.COM - INSTALLATION CHECK
  4892.     AX = 1400h
  4893. Return: AL = 00h not installed, OK to install
  4894.          01h not installed, not OK
  4895.          FFh installed
  4896. Notes:    this function is called by the DOS v3.3+ kernel
  4897.     supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  4898.     supported by DR DOS 5.0
  4899.     documented for MS-DOS 5+, but undocumented in prior versions
  4900. SeeAlso: AX=1401h"NLSFUNC",AX=1402h"NLSFUNC"
  4901. --------D-2F1400-----------------------------
  4902. INT 2F - European MS-DOS 4.0 POPUP - "CheckPu" - INSTALLATION CHECK
  4903.     AX = 1400h
  4904. Return: AX = FFFFh if installed
  4905.         BX = maximum memory required to save screen and keyboard info
  4906.     CF clear if successful
  4907.     CF set on error
  4908.         AX = error code
  4909.         0002h invalid function
  4910.         0004h unknown error
  4911. Note:    the POPUP interface is used by background programs (see INT 21/AH=80h)
  4912.       to communicate with the user
  4913. SeeAlso: AX=1401h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  4914. --------U-2F1401-----------------------------
  4915. INT 2F CU - NLSFUNC.COM - CHANGE CODE PAGE
  4916.     AX = 1401h
  4917.     DS:SI -> internal code page structure (see #02618)
  4918.     BX = new code page (see #01757 at INT 21/AX=6602h)
  4919.     DX = country code???
  4920. Return: AL = status
  4921.          00h successful
  4922.          else DOS error code
  4923. Note:    this function is called by the DOS v3.3+ kernel
  4924. SeeAlso: AX=1400h"NLSFUNC",AX=1402h"NLSFUNC",INT 21/AH=66h
  4925.  
  4926. Format of DOS 3.30 internal code page structure:
  4927. Offset    Size    Description    (Table 02618)
  4928.  00h  8 BYTEs    ???
  4929.  08h 64 BYTEs    name of country information file (see #02619)
  4930.  48h    WORD    system code page (see #01757 at INT 21/AX=6602h)
  4931.  4Ah    WORD    number of supported subfunctions
  4932.  4Ch  5 BYTEs    data to return for INT 21/AX=6502h
  4933.  51h  5 BYTEs    data to return for INT 21/AX=6504h
  4934.  56h  5 BYTEs    data to return for INT 21/AX=6505h
  4935.  5Bh  5 BYTEs    data to return for INT 21/AX=6506h
  4936.  60h 41 BYTEs    data to return for INT 21/AX=6501h
  4937.  
  4938. Format of MS-DOS/PC-DOS/OS2/WinNT/PTS-DOS COUNTRY.SYS file:
  4939. Offset    Size    Description    (Table 02619)
  4940.  00h    BYTE    ID tag (FFh)
  4941.  01h  7 BYTEs    ASCII "COUNTRY"
  4942.  08h  8 BYTEs    ??? (00h)
  4943.  10h    BYTE    ??? (01h)
  4944.  11h    BYTE    ??? (00h)
  4945.  12h    BYTE    ??? (01h)
  4946.  13h    DWORD    offset of first entry in file (see #02620)
  4947. SeeAlso: #02623
  4948.  
  4949. Format of MS-DOS/PC-DOS/OS2/WinNT/PTS-DOS COUNTRY.SYS entry:
  4950. Offset    Size    Description    (Table 02620)
  4951.  00h    WORD    number of country-codepage entries following
  4952.  02h        N Country-Codepage entries:
  4953.         Offset    Size    Description
  4954.          00h    WORD    length of entry, not counting this word (000Ch)
  4955.          02h    WORD    country ID
  4956.          04h    WORD    codepage ID
  4957.          06h    WORD    ??? (0000h)
  4958.          08h    WORD    ??? (0000h)
  4959.          0Ah    DWORD    offset of country-subfunction-header in file
  4960.                   (see #02621)
  4961. Notes:    multiple codepages for a country are stored consecutively
  4962.     PTS/DOS places a copyright string immediately following this structure,
  4963.       though a copyright at the end of the file is preferable
  4964. SeeAlso: #02619
  4965.  
  4966. Format of MS-DOS/PC-DOS/OS2/WinNT/PTS-DOS COUNTRY.SYS country-subfunc header:
  4967. Offset    Size    Description    (Table 02621)
  4968.  00h    WORD    number of subfunction entries following
  4969.  02h        N subfunction entries
  4970.         Offset    Size    Description
  4971.          00h    WORD    length of subfunction entry, not counting this
  4972.                   word (usually 06h)
  4973.          02h    WORD    subfunction ID
  4974.                 (value passed to INT 21/AH=65h in AL)
  4975.          04h    DWORD    offset within file of subfunction data entry
  4976.                   (see #02622)
  4977. SeeAlso: #02620
  4978.  
  4979. Format of MS-DOS/PC-DOS/OS2/WinNT/PTS-DOS COUNTRY.SYS country-subfunc data::
  4980. Offset    Size    Description    (Table 02622)
  4981.  00h    BYTE    ID-tag (FFh)
  4982.  01h  7 BYTEs    table-type signature (blank-padded)
  4983.         "CTYINFO"    general country info (subfn 01h)
  4984.         "UCASE    "    uppercase table (subfn 02h)
  4985.         "LCASE    "    lowercase table (subfn 03h) (DOS 6.2_)
  4986.         "FUCASE "    filename uppercase table (subfn 04h)
  4987.         "FCHAR    "    filename terminator table (subfn 05h)
  4988.         "COLLATE"    collating sequence (subfn 06h)
  4989.         "DBCS    "    double-byte character table (subfn 07h)
  4990.  08h    WORD    length of following table in bytes
  4991.         (if 0000h for DBCS table, there will still be a word of 0000h)
  4992. ---country info (01h)---
  4993.  0Ah    WORD    country ID (see #01400 at AH=38h)
  4994.  0Ch    WORD    code page (see #01757)
  4995.  0Eh 34 BYTEs    country-dependent info (see #01399 at AH=38h)
  4996. ---uppercase table (02h)---
  4997.  0Ah 128 BYTEs    uppercase equivalents (if any) of chars 80h to FFh
  4998. ---lowercase table (03h)---
  4999.  0Ah 256 BYTEs    lowercase equivalents (if any) of chars 00h to FFh
  5000. ---filename uppercase table (04h)---
  5001.  0Ah 128 BYTEs    uppercase equivalents (if any) of chars 80h to FFh
  5002. ---filename terminator table (05h)---
  5003.  0Ah    BYTE    ??? (01h for MS-DOS 3.30-6.00)
  5004.  0Bh    BYTE    lowest permissible character value for filename
  5005.  0Ch    BYTE    highest permissible character value for filename
  5006.  0Dh    BYTE    ??? (00h for MS-DOS 3.30-6.00)
  5007.  0Eh    BYTE    first excluded character in range \ all characters in this
  5008.  0Fh    BYTE    last excluded character in range  / range are illegal
  5009.  10h    BYTE    ??? (02h for MS-DOS 3.30-6.00)
  5010.  11h    BYTE    number of illegal (terminator) characters
  5011.  12h  N BYTEs    characters which terminate a filename:    ."/\[]:|<>+=;,
  5012. ---collating sequence (06h)---
  5013.  0Ah 256 BYTEs    values used to sort characters 00h to FFh
  5014. ---DBCS table (07h)---
  5015.  0Ah 2N BYTEs    start/end for N lead byte ranges
  5016.     WORD    0000h    (end of table)
  5017. SeeAlso: #02621,#01750,#01751,#01753,#01754,#01755,#01756
  5018.  
  5019. Format of DR DOS/Novell DOS/OpenDOS COUNTRY.SYS file:
  5020. Offset    Size    Description    (Table 02623)
  5021.  00h 126 BYTEs    copyright notice (terminated with Ctrl-Z; NUL-padded)
  5022.         the copyright notice starts with the signature
  5023.         "COUNTRY.SYS Rx.xx" where "x.xx" indicates the file format
  5024.         revision, which is checked by the OS (revision is 2.00 for
  5025.         DR DOS 3.41 and 2.01 for all newer versions of DR DOS,
  5026.         Novell DOS, and OpenDOS)
  5027.  7Eh    WORD    signature of file format revision
  5028.         0EDCh = 2.00 (DR DOS 3.41)
  5029.         EDC1h = 2.01 (all newer versions)
  5030.  80h    var    country pointer records (see #02624)
  5031.         (packed array of variable-size records)
  5032. SeeAlso: #02619
  5033.  
  5034. Format of DR DOS/Novell DOS/OpenDOS COUNTRY.SYS country pointer record::
  5035. Offset    Size    Description    (Table 02624)
  5036.  00h    WORD    country code (0000h if end of array)
  5037.  02h    WORD    code page (see #01757)
  5038.  04h    WORD    ??? (0000h)
  5039.  06h  7    WORDs    offsets in file for INT 21/AH=65h subfunctions 01h to 07h, or
  5040.           0000h if no table for that subfunction
  5041.  14h    var    country information
  5042. Notes:    the end-of-file marker is a country pointer record filled entirely with
  5043.       zeros
  5044.     the data at which the pointers point is in the same format as the
  5045.       tables returned by INT 21/AH=65h, except that the general-info
  5046.       table for subfunction 01h does not contain the length word at the
  5047.       beginning
  5048. SeeAlso: #02623
  5049. --------D-2F1401-----------------------------
  5050. INT 2F - European MS-DOS 4.0 POPUP - "PostPu" - OPEN/CLOSE POPUP SCREEN
  5051.     AX = 1401h
  5052.     DL = function (00h open, 01h close)
  5053.     DH = wait flag
  5054.         00h block until screen opens
  5055.         01h return error if screen is not available
  5056.         02h urgent--always open screen immediately
  5057. Return: CF clear if successful
  5058.         BX = amount of memory needed to save screen and keyboard info,
  5059.         0000h if default save location can be used (only if DH was 02h)
  5060.     CF set on error
  5061. Note:    the application using the screen is frozen until the popup screen is
  5062.       closed
  5063. SeeAlso: AX=1400h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  5064. --------U-2F1402-----------------------------
  5065. INT 2F CU - NLSFUNC.COM - GET EXTENDED COUNTRY INFO
  5066.     AX = 1402h
  5067.     BP = subfunction (same as AL for INT 21/AH=65h)
  5068.     BX = code page (see #01757 at INT 21/AX=6602h)
  5069.     DX = country code (see #01400 at INT 21/AH=38h)
  5070.     DS:SI -> internal code page structure (see #02618)
  5071.     ES:DI -> user buffer
  5072.     CX = size of user buffer
  5073. Return: AL = status
  5074.         00h successful
  5075.         else DOS error code
  5076. Notes:    this function is called by the DOS v3.3+ kernel on INT 21/AH=65h
  5077.     code page structure apparently only needed for COUNTRY.SYS pathname
  5078. SeeAlso: AX=1401h"NLSFUNC",AX=1403h"NLSFUNC",AX=1404h,INT 21/AH=65h
  5079. --------D-2F1402-----------------------------
  5080. INT 2F - European MS-DOS 4.0 POPUP - "SavePu" - SAVE POPUP SCREEN
  5081.     AX = 1402h
  5082.     ES:DI -> save buffer (0000h:0000h for default buffer in POPUP)
  5083. Return: CF clear if successful
  5084.     CF set on error
  5085.         AX = error code (see #02625)
  5086. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1403h"POPUP"
  5087.  
  5088. (Table 02625)
  5089. Values for POPUP error code:
  5090.  0001h    process does not own screen
  5091.  0004h    unknown error
  5092.  0005h    invalid pointer
  5093. --------U-2F1403-----------------------------
  5094. INT 2F CU - NLSFUNC.COM - SET CODE PAGE
  5095.     AX = 1403h
  5096.     DS:SI -> internal code page structure (see #02618)
  5097.     BX = code page (see #01757 at INT 21/AX=6602h)
  5098.     DX = country code (see #01400 at INT 21/AH=38h)
  5099. Return: AL = status
  5100.          ???
  5101. Note:    this function is called by the DOS v3.3+ kernel on INT 21/AH=38h
  5102. SeeAlso: AX=1402h"NLSFUNC",AX=1404h,INT 21/AH=38h"SET"
  5103. --------D-2F1403-----------------------------
  5104. INT 2F - European MS-DOS 4.0 POPUP - "RestorePu" - RESTORE SCREEN
  5105.     AX = 1403h
  5106.     ES:DI -> buffer containing saved screen
  5107.         (0000h:0000h for default buffer in POPUP)
  5108. Return: CF clear if successful
  5109.     CF set on error
  5110.         AX = error code (see #02625)
  5111. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1402h"POPUP"
  5112. --------U-2F1404-----------------------------
  5113. INT 2F CU - NLSFUNC.COM - GET COUNTRY INFO
  5114.     AX = 1404h
  5115.     BX = code page (see #01757 at INT 21/AX=6602h)
  5116.     DX = country code (see #01400 at INT 21/AH=38h)
  5117.     DS:SI -> internal code page structure (see #02618)
  5118.     ES:DI -> user buffer
  5119. Return: AL = status
  5120.          ???
  5121. Notes:    this function is called by the DOS v3.3+ kernel on INT 21/AH=38h
  5122.     code page structure apparently only needed for COUNTRY.SYS pathname
  5123. SeeAlso: AX=1402h,AX=1403h,INT 21/AH=38h"GET"
  5124. --------U-2F14FE-----------------------------
  5125. INT 2F U - DR DOS 5.0 NLSFUNC - GET EXTENDED COUNTRY INFORMATION
  5126.     AX = 14FEh
  5127.     BX = code page (FFFFh=global code page) (see #01757 at INT 21/AX=6602h)
  5128.     DX = country ID (FFFFh=current country) (see #01400 at INT 21/AH=38h)
  5129.     ES:DI -> country information buffer
  5130.     CL = info ID
  5131.         01h get general internationalization info
  5132.         02h get pointer to uppercase table
  5133.         04h get pointer to filename uppercase table
  5134.         05h get pointer to filename terminator table
  5135.         06h get pointer to collating sequence table
  5136.         07h get pointer to Double-Byte Character Set table
  5137.     CF set (used to return error if not installed)
  5138. Return: CF clear if successful
  5139.         DS:SI -> requested information
  5140.     CF set on error
  5141. Notes:    DR DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  5142.       or FFh on entry.
  5143.     the DR DOS kernel calls this function on INT 21/AX=6501h
  5144.     the value in CL is not range-checked by the DR DOS 5.0 NLSFUNC
  5145. SeeAlso: #02626,AX=14FFh,INT 21/AH=65h
  5146.  
  5147. Format of DR DOS COUNTRY.SYS file:
  5148. Offset    Size    Description    (Table 02626)
  5149.  00h 126 BYTEs    copyright notice (terminated with Ctrl-Z, padded with NULs)
  5150.  7Eh    WORD    signature EDC1h
  5151.  80h    var    country pointer records
  5152.     Offset    Size    Description
  5153.      00h    WORD    country code (0000h if end of array)
  5154.      02h    WORD    code page (see #01757 at INT 21/AX=6602h)
  5155.      04h    WORD    ??? (0000h)
  5156.      06h  7 WORDs    offsets in file for data tables for subfunctions
  5157.               01h-07h
  5158.  var    var    country information
  5159. --------U-2F14FF-----------------------------
  5160. INT 2F U - DR DOS 5.0 NLSFUNC - PREPARE CODE PAGE
  5161.     AX = 14FFh
  5162.     BX = code page (see #01757 at INT 21/AX=6602h)
  5163. Return: AX = ???
  5164.     ZF set if AX=0000h
  5165. Notes:    DR DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  5166.       or FFh on entry.
  5167.     passes codepage preparation request to each character device supporting
  5168.       the generic IOCTL call
  5169. SeeAlso: AX=14FEh,INT 21/AX=440Ch,INT 21/AX=6602h
  5170. --------U-2F1500-----------------------------
  5171. INT 2F - DOS 4.00 GRAPHICS.COM - INSTALLATION CHECK
  5172.     AX = 1500h
  5173. Return: AX = FFFFh
  5174.     ES:DI -> ??? (graphics data?)
  5175. Note:    this installation check conflicts with the CD-ROM Extensions
  5176.       installation check; moved to AX=AC00h in later versions
  5177. SeeAlso: AX=AC00h
  5178. --------d-2F1500BX0000-----------------------
  5179. INT 2F - CD-ROM - INSTALLATION CHECK
  5180.     AX = 1500h
  5181.     BX = 0000h
  5182. Return: BX = number of CD-ROM drive letters used
  5183.     CX = starting drive letter (0=A:)
  5184.     AX = 15FFh (Novell DOS 7 NWCDEX only!)
  5185. Notes:    this installation check DOES NOT follow the format used by other
  5186.       software
  5187.     this installation check conflicts with the DOS 4.00 GRAPHICS.COM
  5188.       installation check
  5189. BUG:    this function may return an incorrect starting drive letter when
  5190.       INTERLNK is installed
  5191. SeeAlso: AX=150Ch,AX=15FFh,INT 2F/AX=D000h"Lotus"
  5192. --------c-2F1500CH90-------------------------
  5193. INT 2F U - CDBLITZ v2.11 - INSTALLATION CHECK
  5194.     AX = 1500h
  5195.     CH = 90h (function number)
  5196.     BX = 1234h (magic value for CDBLITZ)
  5197. Return: CX = 1234h if installed
  5198.         CF clear
  5199.         DX = BCD version number (DH = major, DL = minor)
  5200. Program: CDBLITZ is a CD-ROM cache by Blitz 'n' Software, Inc.
  5201. SeeAlso: AX=1500h/CH=99h
  5202. --------c-2F1500CH91-------------------------
  5203. INT 2F U - CDBLITZ v2.11 - GET STATISTICS
  5204.     AX = 1500h
  5205.     CH = 91h (function number)
  5206.     BX = 1234h (magic value for CDBLITZ)
  5207. Return: CF clear
  5208.     ES:BX -> statistics record (see #02627)
  5209. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=97h
  5210.  
  5211. Format of CDBLITZ statistics record:
  5212. Offset    Size    Description    (Table 02627)
  5213.  00h    WORD    cache mode (see also AX=1500h/CH=94h)
  5214.         0001h 'min', 0002h 'max'
  5215.  02h    DWORD    number of read calls???
  5216.  06h    DWORD    total number of sectors read
  5217.  0Ah    DWORD    unused??? (zero)
  5218.  0Eh    DWORD    number of cache hit sectors
  5219.  12h    WORD    cache size in KB
  5220.  14h    WORD    unused??? (zero)
  5221.  16h    WORD    cache state (0000h disabled, 0001h enabled)
  5222. --------c-2F1500CH92-------------------------
  5223. INT 2F U - CDBLITZ v2.11 - ENABLE CACHE
  5224.     AX = 1500h
  5225.     CH = 92h (function number)
  5226.     BX = 1234h (magic value for CDBLITZ)
  5227. Return: CF clear
  5228. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=93h,AX=1500h/CH=94h
  5229. --------c-2F1500CH93-------------------------
  5230. INT 2F U - CDBLITZ v2.11 - DISABLE CACHE
  5231.     AX = 1500h
  5232.     CH = 93h (function number)
  5233.     BX = 1234h (magic value for CDBLITZ)
  5234. Return: CF clear
  5235. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=92h,AX=1500h/CH=95h
  5236. --------c-2F1500CH94-------------------------
  5237. INT 2F U - CDBLITZ v2.11 - SET 'MAX' MODE (CACHE BOTH DIRECTORIES AND DATA)
  5238.     AX = 1500h
  5239.     CH = 94h (function number)
  5240.     BX = 1234h (magic value for CDBLITZ)
  5241. Return: CF clear
  5242. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=92h,AX=1500h/CH=95h
  5243. --------c-2F1500CH95-------------------------
  5244. INT 2F U - CDBLITZ v2.11 - SET 'MIN' MODE (CACHE ONLY DIRECTORY ENTRIES)
  5245.     AX = 1500h
  5246.     CH = 95h (function number)
  5247.     BX = 1234h (magic value for CDBLITZ)
  5248. Return: CF clear
  5249. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=94h
  5250. --------c-2F1500CH96-------------------------
  5251. INT 2F U - CDBLITZ v2.11 - FLUSH CACHE
  5252.     AX = 1500h
  5253.     CH = 96h (function number)
  5254.     BX = 1234h (magic value for CDBLITZ)
  5255. Return: CF clear
  5256. Note:    this function resets the counts for number of sectors read and number
  5257.       of cache hits, but no other values in the statistics record
  5258.       (see #02627)
  5259. SeeAlso: AX=1500h/CH=90h
  5260. --------c-2F1500CH97-------------------------
  5261. INT 2F U - CDBLITZ v2.11 - GET CACHE STATISTICS
  5262.     AX = 1500h
  5263.     CH = 97h (function number)
  5264.     BX = 1234h (magic value for CDBLITZ)
  5265. Return: CF clear
  5266.     AL = cache mode (01h 'min', 02h 'max') (see also AX=1500h/CH=94h)
  5267.     AH = cache state (00h disabled, 01h enabled)
  5268.     BX = cache size in KB
  5269.     DX:CX = total number of reads
  5270.     DI:SI = number of cache hits
  5271. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=91h
  5272. --------c-2F1500CH99-------------------------
  5273. INT 2F U - CDBLITZ v2.11 - UNINSTALL
  5274.     AX = 1500h
  5275.     CH = 99h (function number)
  5276.     BX = 1234h (magic value for CDBLITZ)
  5277. Return: CF clear
  5278.     ???
  5279. Program: CDBLITZ is a CD-ROM cache by Blitz 'n' Software, Inc.
  5280. SeeAlso: AX=1500h/CH=90h
  5281. --------d-2F1501-----------------------------
  5282. INT 2F - CD-ROM - GET DRIVE DEVICE LIST
  5283.     AX = 1501h
  5284.     ES:BX -> buffer to hold drive letter list (5 bytes per drive letter)
  5285. Return: buffer filled, for each drive letter
  5286.       BYTE    subunit number in driver
  5287.       DWORD address of device driver header (see #01646)
  5288. Note:    reportedly returns AX=0000h and an invalid address under Windows95;
  5289.       other reports say it works fine
  5290. SeeAlso: AX=1510h
  5291. --------d-2F1502-----------------------------
  5292. INT 2F - CD-ROM - GET COPYRIGHT FILE NAME
  5293.     AX = 1502h
  5294.     ES:BX -> 38-byte buffer for name of copyright file
  5295.     CX = drive number (0=A:)
  5296. Return: CF set if drive is not a CD-ROM drive
  5297.         AX = 000Fh (invalid drive)
  5298.     CF clear if successful
  5299. SeeAlso: AX=1503h
  5300. --------d-2F1503-----------------------------
  5301. INT 2F - CD-ROM - GET ABSTRACT FILE NAME
  5302.     AX = 1503h
  5303.     ES:BX -> 38-byte buffer for name of abstract file
  5304.     CX = drive number (0=A:)
  5305. Return: CF set if drive is not a CD-ROM drive
  5306.         AX = 000Fh (invalid drive)
  5307.     CF clear if successful
  5308. SeeAlso: AX=1502h,AX=1504h
  5309. --------d-2F1504-----------------------------
  5310. INT 2F - CD-ROM - GET BIBLIOGRAPHIC DOC FILE NAME
  5311.     AX = 1504h
  5312.     ES:BX -> 38-byte buffer for name of bibliographic documentation file
  5313.     CX = drive number (0=A:)
  5314. Return: CF set if drive is not a CD-ROM drive
  5315.         AX = 000Fh (invalid drive)
  5316.     CF clear if successful
  5317. SeeAlso: AX=1502h,AX=1503h
  5318. --------d-2F1505-----------------------------
  5319. INT 2F - CD-ROM - READ VTOC
  5320.     AX = 1505h
  5321.     ES:BX -> 2048-byte buffer
  5322.     CX = drive number (0=A:)
  5323.     DX = sector index (0=first volume descriptor,1=second,...)
  5324. Return: CF set on error
  5325.         AX = error code (15=invalid drive,21=not ready)
  5326.     CF clear if successful
  5327.         AX = volume descriptor type (1=standard,FFh=terminator,0=other)
  5328. Note:    This function was not supported by Novell DOS 7 NWCDEX prior to the
  5329.       08/16/94 update
  5330. --------d-2F1506-----------------------------
  5331. INT 2F - CD-ROM - TURN DEBUGGING ON
  5332.     AX = 1506h
  5333.     BX = debugging function to enable
  5334. Note:    reserved for development
  5335. SeeAlso: AX=1507h
  5336. --------d-2F1507-----------------------------
  5337. INT 2F - CD-ROM - TURN DEBUGGING OFF
  5338.     AX = 1507h
  5339.     BX = debugging function to disable
  5340. Note:    reserved for development
  5341. SeeAlso: AX=1506h
  5342. --------d-2F1508-----------------------------
  5343. INT 2F - CD-ROM - ABSOLUTE DISK READ
  5344.     AX = 1508h
  5345.     ES:BX -> buffer
  5346.     CX = drive number (0=A:)
  5347.     SI:DI = starting sector number
  5348.     DX = number of sectors to read
  5349. Return: CF set on error
  5350.         AL = error code (0Fh invalid drive,15h not ready)
  5351.     CF clear if successful
  5352. Note:    returns error 15h (not ready) under Windows95 if the starting sector
  5353.       number is less than 10h
  5354. SeeAlso: AX=1509h
  5355. --------d-2F1509-----------------------------
  5356. INT 2F - CD-ROM - ABSOLUTE DISK WRITE
  5357.     AX = 1509h
  5358.     ES:BX -> buffer
  5359.     CX = drive number (0=A:)
  5360.     SI:DI = starting sector number
  5361.     DX = number of sectors to write
  5362. Note:    corresponds to INT 26h and is currently reserved and nonfunctional,
  5363.       but could be implemented for CD-R and CD-RW drives
  5364. SeeAlso: AX=1508h
  5365. --------d-2F150A-----------------------------
  5366. INT 2F - CD-ROM - RESERVED
  5367.     AX = 150Ah
  5368. --------d-2F150B-----------------------------
  5369. INT 2F - CD-ROM v2.00+ - DRIVE CHECK
  5370.     AX = 150Bh
  5371.     CX = drive number (0=A:)
  5372. Return: BX = ADADh if MSCDEX.EXE installed
  5373.         AX = support status
  5374.         0000h if drive not supported
  5375.         nonzero if supported
  5376. SeeAlso: AX=150Dh
  5377. --------d-2F150CBX0000-----------------------
  5378. INT 2F - CD-ROM v2.00+ - GET MSCDEX.EXE VERSION (GET VERSION)
  5379.     AX = 150Ch
  5380.     BX = 0000h
  5381. Return: BH = major version
  5382.     BL = minor version
  5383. Notes:    MSCDEX.EXE versions prior to 2.00 leave BX unchanged, thus BX should
  5384.       be 0000h on entry
  5385.     Corel's CORELCDX.COM v1.01d returns 2.20, v1.12a returns 2.21
  5386.     Meridian Data's CDNETEX.EXE returns its own version number, e.g. 4.70
  5387.     J.M.A. Hall's CDEMU2.COM returns 2.10 (it is an MSCDEX emulator for
  5388.       networked CD-ROM drives)
  5389.     Windows95 returns v2.95
  5390.     Novell DOS 7 NWCDEX.EXE returns the same version number reported in
  5391.       its startup message
  5392. SeeAlso: AX=1500h"CD-ROM",AX=15FFh"CORELCDX"
  5393. --------d-2F150D-----------------------------
  5394. INT 2F - CD-ROM v2.00+ - GET CD-ROM DRIVE LETTERS
  5395.     AX = 150Dh
  5396.     ES:BX -> buffer for drive letter list (1 byte per drive)
  5397. Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
  5398.     to the drive in the same position for function 1501h
  5399. SeeAlso: AX=150Bh
  5400. --------d-2F150E-----------------------------
  5401. INT 2F - CD-ROM v2.00+ - GET/SET VOLUME DESCRIPTOR PREFERENCE
  5402.     AX = 150Eh
  5403.     BX = subfunction
  5404.         00h get preference
  5405.         DX = 0000h
  5406.         Return: DX = preference settings
  5407.         01h set preference
  5408.         DH = volume descriptor preference
  5409.             01h = primary volume descriptor
  5410.             02h = supplementary volume descriptor
  5411.         DL = supplementary volume descriptor preference
  5412.             01h = shift-Kanji
  5413.     CX = drive number (0=A:)
  5414. Return: CF set on error
  5415.         AX = error code (15=invalid drive,1=invalid function)
  5416.     CF clear if successful
  5417. --------d-2F150F-----------------------------
  5418. INT 2F - CD-ROM v2.00+ - GET DIRECTORY ENTRY
  5419.     AX = 150Fh
  5420.     CL = drive number (0=A:)
  5421.     CH bit 0 = copy flag
  5422.         clear if direct copy
  5423.         set if copy to structure which removes ISO/High Sierra diffs
  5424.     ES:BX -> ASCIZ path name
  5425.     SI:DI -> buffer for directory entry (see #02628,#02629)
  5426.         must be 255 bytes for direct copy, 285 bytes for canonical
  5427. Return: CF set on error
  5428.         AX = error code
  5429.     CF clear if successful
  5430.         AX = disk format (0=High Sierra,1=ISO 9660)
  5431. Note:    this function was not supported by Novell DOS 7 NWCDEX prior to the
  5432.       08/16/94 update
  5433.  
  5434. Format of CD-ROM directory entry (direct copy):
  5435. Offset    Size    Description    (Table 02628)
  5436.  00h    BYTE    length of directory entry
  5437.  01h    BYTE    length of XAR in Logical Block Numbers
  5438.  02h    DWORD    LBN of data, Intel (little-endian) format
  5439.  06h    DWORD    LBN of data, Motorola (big-endian) format
  5440.  0Ah    DWORD    length of file, Intel format
  5441.  0Eh    DWORD    length of file, Motorola format
  5442. ---High Sierra---
  5443.  12h  6 BYTEs    date and time
  5444.  18h    BYTE    bit flags
  5445.  19h    BYTE    reserved
  5446. ---ISO 9660---
  5447.  12h  7 BYTEs    date and time
  5448.         (seventh byte is offset from GMT in 15-minute increments)
  5449.  19h    BYTE    bit flags
  5450. ---both formats---
  5451.  1Ah    BYTE    interleave size
  5452.  1Bh    BYTE    interleave skip factor
  5453.  1Ch    WORD    volume set sequence number, Intel format
  5454.  1Eh    WORD    volume set sequence number, Motorola format
  5455.  20h    BYTE    length of file name
  5456.  21h  N BYTEs    file name
  5457.     BYTE    (optional) padding if filename is odd length
  5458.       N BYTEs    system data
  5459. SeeAlso: #02629,#01352
  5460.  
  5461. Format of CD-ROM directory entry (canonicalized):
  5462. Offset    Size    Description    (Table 02629)
  5463.  00h    BYTE    length of XAR in Logical Block Numbers
  5464.  01h    DWORD    Logical Block Number of file start
  5465.  05h    WORD    size of disk in logical blocks
  5466.  07h    DWORD    file length in bytes
  5467.  0Bh  7 BYTEs    date and time
  5468.  12h    BYTE    bit flags
  5469.  13h    BYTE    interleave size
  5470.  14h    BYTE    interleave skip factor
  5471.  15h    WORD    volume set sequence number
  5472.  17h    BYTE    length of file name
  5473.  18h 38 BYTEs    ASCIZ filename
  5474.  3Eh    WORD    file version number
  5475.  40h    BYTE    number of bytes of system use data
  5476.  41h 220 BYTEs    system use data
  5477. SeeAlso: #02628
  5478. --------d-2F1510-----------------------------
  5479. INT 2F - CD-ROM v2.10+ - SEND DEVICE DRIVER REQUEST
  5480.     AX = 1510h
  5481.     CX = CD-ROM drive letter (0 = A, 1 = B, etc)
  5482.     ES:BX -> CD-ROM device driver request header (see #02597 at AX=0802h)
  5483. Return: CF clear if device driver has been called (check the request header's
  5484.           status word to determine whether an error has occurred)
  5485.         ES:BX request header updated
  5486.     CF set if device driver has not been called
  5487.         AX = error code (000Fh = invalid drive, 0001h = invalid function)
  5488.         ES:BX request header unchanged
  5489. Notes:    MSCDEX initializes the device driver request header's subunit field
  5490.       based on the drive number specified in CX
  5491.     MSCDEX v2.21 through v2.25 (at least) return error code AX=0001h if
  5492.       nested calls are attempted
  5493. BUGS:    Novell DOS 7 NWCDEX prior to the 12/13/94 update did not initialize
  5494.       the subunit field
  5495.     Windows95 sets CF if CX isn't a CD-ROM drive but leaves CF unchanged
  5496.       if the drive is in fact a CD-ROM
  5497. SeeAlso: AX=0802h
  5498. --------d-2F15FFBX0000-----------------------
  5499. INT 2F - CD-ROM - CORELCDX - INSTALLATION CHECK
  5500.     AX = 15FFh
  5501.     BX = 0000h
  5502. Return: BX = ABCDh if CORELCDX loaded
  5503. Note:    Corel's CORELCDX.COM is a replacement for MSCDEX.EXE; it also supports
  5504.       the standard MSCDEX installation check calls AX=1500h and AX=150Ch
  5505. SeeAlso: AX=1500h"CD-ROM",AX=150Ch
  5506. --------W-2F1600-----------------------------
  5507. INT 2F - MS Windows - WINDOWS ENHANCED MODE INSTALLATION CHECK
  5508.     AX = 1600h
  5509. Return: AL = status
  5510.         00h neither Windows 3.x enhanced mode nor Windows/386 2.x running
  5511.         01h Windows/386 2.x running
  5512.         80h XMS version 1 driver installed (neither Windows 3.x enhanced
  5513.           mode nor Windows/386 2.x running) (obsolete--see note)
  5514.         FFh Windows/386 2.x running
  5515.     AL = anything else
  5516.         AL = Windows major version number >= 3
  5517.         AH = Windows minor version number
  5518. Notes:    INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
  5519.       drivers, TSRs, and applications) to cooperate with multitasking
  5520.       Windows/386 2.x and Windows 3.x and higher enhanced mode.
  5521.     certain calls are also supported in the Microsoft 80286 DOS extender in
  5522.       Windows standard mode
  5523.     this function served as the installation check and AX=1610h served to
  5524.       get the driver entry point for XMS version 1, which is now obsolete.
  5525.       Use AX=4300h and AX=4310h instead
  5526. SeeAlso: AX=160Ah,AX=1610h,AX=4300h,AX=4680h
  5527. Index:    installation check;XMS version 1
  5528. --------W-2F1602-----------------------------
  5529. INT 2F - MS Windows/386 2.x - GET API ENTRY POINT
  5530.     AX = 1602h
  5531. Return: ES:DI -> Windows/386 2.x API procedure entry point
  5532. Notes:    this interface is supported in Windows 3.x and Windows95 only for 2.x
  5533.       compatibility
  5534.     to get the current virtual machine (VM) ID in Windows/386 2.x:
  5535.         AX = 0000h
  5536.         ES:DI -> return address
  5537.         JUMP to address returned from INT 2F/AX=1602h
  5538.     After JUMP, at return address:
  5539.         BX = current VM ID.
  5540. SeeAlso: AX=C020h
  5541. --------W-2F1603-----------------------------
  5542. INT 2F C - MS Windows/386 - GET INSTANCE DATA
  5543.     AX = 1603h
  5544. Return: AX = 5248h ('RH') if supported
  5545.         DS:SI -> Windows/386 instance data (see #02630)
  5546. Notes:    reportedly supported by RM Nimbus MS-DOS 3.3 kernel
  5547.     this function is called by DOSMGR when AX=1607h/BX=0015h is not
  5548.       supported, as is the case in DOS versions prior to 5.0
  5549.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  5550.       this function, DOSMGR's behavior, and instancing in general
  5551. SeeAlso: AX=1607h/BX=0015h
  5552.  
  5553. Format of Windows/386 instance data:
  5554. Offset    Size    Description    (Table 02630)
  5555.  00h    WORD    segment of IO.SYS (0000h = default 0070h)
  5556.  02h    WORD    offset in IO.SYS of STACKS data structure (DOS 3.2x)
  5557.         0000h if not applicable
  5558.  04h    WORD    number of instance data entries (max 32)
  5559.  06h    Array of instance data entries
  5560.     Offset    Size    Description
  5561.      00h    WORD    segment (0002h = DOS kernel)
  5562.      02h    WORD    offset
  5563.      04h    WORD    size
  5564. --------W-2F1605-----------------------------
  5565. INT 2F - MS Windows - WINDOWS ENHANCED MODE & 286 DOSX INIT BROADCAST
  5566.     AX = 1605h
  5567.     ES:BX = 0000h:0000h
  5568.     DS:SI = 0000h:0000h
  5569.     CX = 0000h
  5570.     DX = flags
  5571.         bit 0 = 0 if Windows enhanced-mode initialization
  5572.         bit 0 = 1 if Microsoft 286 DOS extender initialization
  5573.         bits 1-15 reserved (undefined)
  5574.     DI = version number (major in upper byte, minor in lower)
  5575. Return: CX = 0000h if okay for Windows to load
  5576.     CX = FFFFh (other registers unchanged) if Windows 3.0 in standard mode
  5577.     CX <> 0 if Windows should not load
  5578.     ES:BX -> startup info structure (see #02631)
  5579.     DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
  5580.           (see #02634)
  5581. Notes:    the Windows enhanced mode loader and Microsoft 286 DOS extender will
  5582.       broadcast an INT 2F/AX=1605h call when initializing.    Any DOS device
  5583.       driver or TSR can watch for this broadcast and return the appropriate
  5584.       values.  If the driver or TSR returns CX <> 0, it is also its
  5585.       responsibility to display an error message (however, Windows95 is
  5586.       reported to load regardless of the returned CX).
  5587.     each handler must first chain to the prior INT 2F handler with
  5588.       registers unchanged before processing the call
  5589.     if the handler requires local data on a per-VM basis, it must store the
  5590.       returned ES:BX in the "next" field of a startup info structure and
  5591.       return a pointer to that structure in ES:BX
  5592.     a single TSR may set the V86 mode enable/disable callback; if DS:SI is
  5593.       already nonzero, the TSR must fail the initialization by setting CX
  5594.       nonzero
  5595.     MSD checks for Windows 3.0 running in standard mode by testing whether
  5596.       CX=FFFFh and other registers are unchanged on return
  5597.     Novell DOS v7.0 (Update 8 - Update 11) TASKMGR in multitasking mode
  5598.       uses this broadcast, even if TASKMGR.INI sets WinPresent= to OFF
  5599.     Microsoft's EMM386.EXE for DOS 5+ when installed with the NOEMS option
  5600.       changes its driver name from EMMQXXX0 to EMMXXXX0 while Windows is
  5601.       active
  5602. SeeAlso: AX=1606h,AX=1608h,AX=4B05h
  5603.  
  5604. Format of Windows Startup Information Structure:
  5605. Offset    Size    Description    (Table 02631)
  5606.  00h  2 BYTEs    major, minor version of info structure
  5607.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  5608.  06h    DWORD    pointer to ASCIZ name of virtual device file or 0000h:0000h
  5609.  0Ah    DWORD    virtual device reference data (see #02633)
  5610.         (only used if above nonzero)
  5611.  0Eh    DWORD    pointer to instance data records (see #02632) or 0000h:0000h
  5612. ---structure version >= 4.0---
  5613.  12h    DWORD    pointer to optionally-instanced data records (see #02632)
  5614.           or 0000h:0000h
  5615.  
  5616. Format of one Instance Item in array:
  5617. Offset    Size    Description    (Table 02632)
  5618.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  5619.  04h    WORD    size of instance data
  5620. SeeAlso: #02631
  5621.  
  5622. Format of Virtual Device Reference Data:
  5623. Offset    Size    Description    (Table 02633)
  5624.  00h    DWORD    physical address of ??? or 00000000h
  5625.  04h    DWORD    physical address of ??? table
  5626.  08h    DWORD    "DEST_PAGE" address to which pages must be mapped
  5627.  0Ch  N DWORDs    "SRC_PAGE" physical addresses of the pages
  5628.         00000000h = end of table
  5629. Note:    EMM386.EXE sets the first pointer to the start of the device driver
  5630.       chain, the second pointer to a field of 40h bytes followed by a
  5631.       16-bit offset to the end of the SRC_PAGE table, and DEST_PAGE to
  5632.       the start segment of the UMB area
  5633. SeeAlso: #02631
  5634.  
  5635. (Table 02634)
  5636. Values Windows virtual mode enable/disable procedure is called with:
  5637.     AX = 0000h disable V86 mode
  5638.     AX = 0001h enable V86 mode
  5639.     interrupts disabled
  5640. Return: CF set on error
  5641.     CF clear if successful
  5642.     interrupts disabled
  5643. SeeAlso: #02631
  5644. --------W-2F1606-----------------------------
  5645. INT 2F - MS Windows - WINDOWS ENHANCED MODE & 286 DOSX EXIT BROADCAST
  5646.     AX = 1606h
  5647.     DX = flags
  5648.         bit 0 = 0 if Windows enhanced-mode exit
  5649.         bit 0 = 1 if Microsoft 286 DOS extender exit
  5650.         bits 1-15 reserved (undefined)
  5651. Notes:    if the init broadcast fails (AX=1605h returned CX <> 0), then this
  5652.       broadcast will be issued immediately.
  5653.     this call will be issued in real mode
  5654.     Novell DOS v7.0 (Update 8 - Update 15) TASKMGR in multitasking mode
  5655.       uses this broadcast, even if TASKMGR.INI sets WinPresent= to OFF
  5656. SeeAlso: AX=1605h,AX=1609h
  5657. --------W-2F1607-----------------------------
  5658. INT 2F - MS Windows - VIRTUAL DEVICE CALL OUT API
  5659.     AX = 1607h
  5660.     BX = virtual device ID (see #02642)
  5661.     CX = (usually) callout subfunction
  5662. Return: (usually) AX,BX,CX,DX,ES contain results
  5663. Notes:    more of a convention than an API, this call specifies a standard
  5664.       mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
  5665.       to DOS device drivers and TSRs
  5666.     see below for details on several virtual devices
  5667. SeeAlso: AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1607h/BX=0015h
  5668. SeeAlso: AX=1607h/BX=0018h,AX=1684h"DEVICE API",AX=C020h
  5669. --------W-2F1607BX0006-----------------------
  5670. INT 2F - MS Windows - "V86MMGR" VIRTUAL DEVICE API
  5671.     AX = 1607h
  5672.     BX = 0006h (VxD identifier of "V86MMGR")
  5673.     CX = 0000h
  5674. Return: AX = status
  5675.         0000h if local A20 state changed
  5676.         1607h if A20 unchanged
  5677.         other if global A20 state changed
  5678. SeeAlso: AX=1607h"CALL OUT API"
  5679. --------W-2F1607BX000C-----------------------
  5680. INT 2F - MS Windows - "VMD" VIRTUAL MOUSE DEVICE API
  5681.     AX = 1607h
  5682.     BX = 000Ch (VxD identifier of "VMD")
  5683. Return: CX = nonzero if mouse driver already virtualized
  5684. Note:    VMD (Virtual Mouse Driver) calls this and then checks whether CX is
  5685.       nonzero; if yes, it will not automatically virtualize the mouse
  5686.       driver.  This would be used if MOUSE.COM already virtualizes
  5687.       itself using the Windows API.
  5688. SeeAlso: AX=1607h/BX=0014h,AX=1607h/BX=0015h
  5689. --------W-2F1607BX000D-----------------------
  5690. INT 2F C - MS Windows95 - "VKD" VIRTUAL DEVICE - ??? CALLOUT
  5691.     AX = 1607h
  5692.     BX = 000Dh (VxD ID for VKD)
  5693.     ???
  5694. Return: ???
  5695. SeeAlso: AX=1607h"CALL OUT API",#02642
  5696. --------W-2F1607BX0010-----------------------
  5697. INT 2F C - MS Windows 3.1 - "BLOCKDEV" VIRTUAL HARD DISK DEVICE API
  5698.     AX = 1607h
  5699.     BX = 0010h (VxD identifier of "BLOCKDEV")
  5700.     CX = function
  5701.         0001h starting FastDisk compatibility tests
  5702.         0002h ending FastDisk compatibility tests
  5703.         0003h check if FastDisk installation allowed
  5704.         Return: CX = 0000h if allowed
  5705. Note:    this interface is called by the Windows FastDisk driver (such as
  5706.       WDCTRL) when it thinks that the INT 13h handler immediately below
  5707.       IO.SYS's INT 13h code is not in ROM; it should be supported by any
  5708.       program which hooks itself underneath IO.SYS's INT 13h code with
  5709.       INT 2F/AH=13h
  5710. SeeAlso: AX=1607h/BX=0014h,INT 2F/AH=13h
  5711. --------W-2F1607BX0014-----------------------
  5712. INT 2F - MS Windows - "VNETBIOS" VIRTUAL DEVICE API
  5713.     AX = 1607h
  5714.     BX = 0014h (VxD identifier of "VNETBIOS")
  5715. Return: ES:DI -> 128-byte table specifying VNETBIOS actions for each NetBIOS
  5716.         command code (see #02635)
  5717. Note:    VNETBIOS (Virtual NetBIOS) calls this function to determine whether
  5718.       the NetBIOS has an extensions Windows should know about
  5719. SeeAlso: AX=1607h/BX=000Ch,AX=1607h/BX=0010h,AX=1607h/BX=0015h
  5720.  
  5721. (Table 02635)
  5722. Values for VNETBIOS action code:
  5723.  00h    "VN_Unknown" unknown command
  5724.  04h    "VN_No_Map"  no memory mapping necessary
  5725.  08h    "VN_Map_In"  input buffer is quickly used, so no global mapping needed
  5726.  0Ch    "VN_Map_In"  output buffer is quickly used, so no global mapping needed
  5727.  10h    "VN_Map_In_Out"     buffer is quickly used, so no global mapping needed
  5728.  14h    "VN_Chain_Send"     the chain-send command
  5729.  18h    "VN_Cancel"    special case for cancel command
  5730.  1Ch    "VN_Buffer_In"    buffer is incoming
  5731.  20h    "VN_Buffer_Out" buffer is outgoing
  5732.  24h    "VN_Buffer_In_Out" buffer used for both incoming and outgoing data
  5733. --------D-2F1607BX0015-----------------------
  5734. INT 2F C - MS Windows - "DOSMGR" VIRTUAL DEVICE API
  5735.     AX = 1607h
  5736.     BX = 0015h (VxD identifier of "DOSMGR")
  5737.     CX = function
  5738.         0000h query instance processing
  5739.         DX = 0000h
  5740.         Return: CX = state
  5741.                 0000h not instanced
  5742.                 other instanced (DOS 5+ kernel returns 0001h)
  5743.                 DX = segment of DOS drivers or 0000h for
  5744.                     default of 0070h
  5745.                 ES:BX -> patch table (see #02637)
  5746.         0001h set patches in DOS
  5747.         DX = bit mask of patch requests (see #02636)
  5748.         Return: AX = B97Ch
  5749.             BX = bit mask of patches applied (see #02636)
  5750.             DX = A2ABh
  5751.         0002h remove patches in DOS (ignored by DOS 5.0 kernel)
  5752.         DX = bit mask of patch requests (see #02636)
  5753.         Return: CX = 0000h (DOS 5-6)
  5754.         Note:    return values are ignored by DOSMGR in Windows 3.1
  5755.         0003h get size of DOS data structures
  5756.         DX = bit mask of request (only one bit can be set)
  5757.             bit 0: Current Directory Structure size
  5758.         Return: if supported request:
  5759.                 AX = B97Ch
  5760.                 CX = size in bytes of requested structure
  5761.                 DX = A2ABh
  5762.             else:
  5763.                 CX = 0000h
  5764.                 all other registers preserved
  5765.         0004h determine instanced data structures
  5766.         Return: AX = B97Ch if supported
  5767.             DX = A2ABh if supported (DOS 5+ kernel returns 0000h)
  5768.             BX = bit mask of instanced items
  5769.                 bit 0: CDS
  5770.                 bit 1: SFT
  5771.                 bit 2: device list
  5772.                 bit 3: DOS swappable data area
  5773.         0005h get device driver size
  5774.         ES = segment of device driver
  5775.         Return: DX:AX = 0000h:0000h on error (not dev. driver segment)
  5776.             DX:AX = A2ABh:B97Ch if successful
  5777.                 BX:CX = size of device driver in bytes
  5778. Notes:    DOSMGR (DOS Manager) will check whether the OEM DOS/BIOS data has
  5779.       been instanced via this API and will not perform its own default
  5780.       instancing of the normal DOS/BIOS data if so; if this API is not
  5781.       supported, DOSMGR will also try to access instancing data through
  5782.       INT 2F/AX=1603h
  5783.     these functions are supported by the DOS 5+ kernel; DOSMGR contains
  5784.       tables of instancing information for earlier versions of DOS
  5785.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  5786.       DOSMGR's behavior and instancing in general
  5787. SeeAlso: AX=1603h,AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h
  5788. SeeAlso: AX=1684h"DEVICE API"
  5789.  
  5790. Bitfields for DOSMGR patch requests:
  5791. Bit(s)    Description    (Table 02636)
  5792.  0    enable critical sections
  5793.  1    NOP setting/checking user ID
  5794.  2    turn INT 21/AH=3Fh on STDIN into polling loop
  5795.  3    trap stack fault in "SYSINIT" to WIN386
  5796.  4    BIOS patch to trap "Insert disk X:" to WIN386
  5797.  
  5798. Format of DOSMGR patch table:
  5799. Offset    Size    Description    (Table 02637)
  5800.  00h  2 BYTEs    DOS version (major, minor)
  5801.  02h    WORD    offset in DOS data segment of "SAVEDS"
  5802.  04h    WORD    offset in DOS data segment of "SAVEBX"
  5803.  06h    WORD    offset in DOS data segment of InDOS flag
  5804.  08h    WORD    offset in DOS data segment of User ID word
  5805.  0Ah    WORD    offset in DOS data segment of "CritPatch" table to enable
  5806.           critical section calls (see INT 2A/AH=80h)
  5807.  0Ch    WORD    (DOS 5+ only) offset in DOS data segment of "UMB_HEAD",
  5808.           containing segment of last MCB in conventional memory
  5809. --------W-2F1607BX0018-----------------------
  5810. INT 2F C - MS Windows - "VMPoll" VIRTUAL DEVICE - IDLE CALLOUT
  5811.     AX = 1607h
  5812.     BX = 0018h (VMPoll VxD ID) (see #02642)
  5813.     CX = 0000h
  5814. Return: AX = status
  5815.         0000h if timeslice used
  5816.         nonzero if timeslice not needed
  5817. Note:    when VMPoll makes this callout, all virtual machines are idle, and any
  5818.       interested TSR can use the opportunity to perform background
  5819.       processing
  5820. SeeAlso: AX=1607h"CALL OUT API",AX=1689h
  5821. --------W-2F1607BX0021--------------------------------------
  5822. INT 2F C - MS Windows - "PageFile" VIRTUAL DEVICE - GET LOCK BYTE
  5823.     AX = 1607h
  5824.     BX = 0021h (PageFile VxD ID)
  5825.     CX = 0000h
  5826. Return: AX = status
  5827.         0000h success
  5828.         ES:DI -> cache lock byte in disk cacher
  5829.         other no disk cache or unsupported
  5830. Notes:    PageFile issues this call on real-mode initialization in order to allow
  5831.       disk caches to provide it with a byte which it can use to temporarily
  5832.       lock the disk cache; VMPOLL also issues this call, so it is made
  5833.       twice each time Windows starts up
  5834.     if this call fails, PageFile falls back to other techniques for locking
  5835.       the disk cache
  5836. SeeAlso: AX=1607h"CALL OUT API"
  5837. --------W-2F1607BX002D-----------------------
  5838. INT 2F C - MS Windows - "W32S" VIRTUAL DEVICE - ??? CALLOUT
  5839.     AX = 1607h
  5840.     BX = 002Dh (VxD ID for W32S)
  5841.     ???
  5842. Return: ???
  5843. SeeAlso: AX=1607h"CALL OUT API",#02642
  5844. --------W-2F1607BX0040-----------------------
  5845. INT 2F C - MS Windows - "IFSMgr" VIRTUAL DEVICE - ??? CALLOUT
  5846.     AX = 1607h
  5847.     BX = 0040h (VxD ID for IFSMgr)
  5848.     ???
  5849. Return: ???
  5850. SeeAlso: AX=1607h"CALL OUT API",#02642
  5851. --------W-2F1607BX0446-----------------------
  5852. INT 2F C - MS Windows - "VADLIBD" VIRTUAL DEVICE - ??? CALLOUT
  5853.     AX = 1607h
  5854.     BX = 0446h (VxD ID for VADLIBD)
  5855.     ???
  5856. Return: ???
  5857. SeeAlso: AX=1607h"CALL OUT API",#02642
  5858. --------W-2F1607BX0484-----------------------
  5859. INT 2F C - MS Windows - "IFSMgr" VIRTUAL DEVICE - ??? CALLOUT
  5860.     AX = 1607h
  5861.     BX = 0484h (VxD ID for IFSMgr)
  5862.     ???
  5863. Return: ???
  5864. SeeAlso: AX=1607h"CALL OUT API",#02642
  5865. --------W-2F1607BX0487-----------------------
  5866. INT 2F C - MS Windows - "NWSUP" VIRTUAL DEVICE - ??? CALLOUT
  5867.     AX = 1607h
  5868.     BX = 0487h (VxD ID for NWSUP)
  5869.     ???
  5870. Return: ???
  5871. SeeAlso: AX=1607h"CALL OUT API",#02642
  5872. --------E-2F1607BX22C0-----------------------
  5873. INT 2F C - Rational Systems DOS/4GW - ???
  5874.     AX = 1607h
  5875.     BX = 22C0h
  5876.     ???
  5877. Return: ???
  5878. SeeAlso: INT 15/AX=BF02h,INT 15/AX=BF04h,#02642
  5879. --------W-2F1607BX28A1-----------------------
  5880. INT 2F C - MS Windows - "PharLap" VIRTUAL DEVICE - ??? CALLOUT
  5881.     AX = 1607h
  5882.     BX = 28A1h (VxD ID for PharLap)
  5883.     ???
  5884. Return: ???
  5885. SeeAlso: AX=1607h"CALL OUT API",#02642
  5886. --------W-2F1607BX7A5F-----------------------
  5887. INT 2F C - MS Windows - "SIWVID" VIRTUAL DEVICE - ??? CALLOUT
  5888.     AX = 1607h
  5889.     BX = 7A5Fh (VxD ID for SIWVID)
  5890.     ???
  5891. Return: ???
  5892. SeeAlso: AX=1607h"CALL OUT API",#02642
  5893. --------W-2F1608-----------------------------
  5894. INT 2F C - MS Windows - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST
  5895.     AX = 1608h
  5896. Notes:    called after all installable devices have been initialized
  5897.     real-mode software may be called between the Windows enhanced-mode init
  5898.       call (AX=1605h) and this call; the software must detect this
  5899.       situation
  5900. SeeAlso: AX=1605h,AX=1609h
  5901. --------W-2F1609-----------------------------
  5902. INT 2F C - MS Windows - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST
  5903.     AX = 1609h
  5904. Note:    called at the beginning of a normal exit sequence; not made in the
  5905.       event of a fatal system crash
  5906. SeeAlso: AX=1606h,AX=1608h
  5907. --------W-2F160A-----------------------------
  5908. INT 2F - MS Windows 3.1 - IDENTIFY WINDOWS VERSION AND TYPE
  5909.     AX = 160Ah
  5910. Return: AX = 0000h if call supported
  5911.         BX = version (BH=major, BL=minor)
  5912.         CX = mode (0002h = standard, 0003h = enhanced)
  5913. SeeAlso: AX=1600h,AX=4680h
  5914. --------W-2F160B-----------------------------
  5915. INT 2F - MS Windows 3.1 - IDENTIFY TSRs
  5916.     AX = 160Bh
  5917.     ES:DI = 0000h:0000h
  5918. Return: ES:DI -> TSR information structure (see #02638)
  5919. Desc:    this call allows Windows-aware TSRs to make themselves known to
  5920.       Windows.
  5921. Note:    the TSR should first chain to the previous INT 2F handler, then
  5922.       allocate a communication structure, place the returned ES:DI
  5923.       pointer in the first field, and return a pointer to the new
  5924.       structure
  5925. SeeAlso: AX=1605h,AX=160Ch,AX=4B01h,AX=4B05h
  5926.  
  5927. Format of TSR-to-Windows information structure:
  5928. Offset    Size    Description    (Table 02638)
  5929.  00h    DWORD    pointer to next structure
  5930.  04h    WORD    PSP segment
  5931.  06h    WORD    API version ID (0100h)
  5932.  08h    WORD    EXEC flags (how to load command specified by "exec_cmd")
  5933.         bit 0: "WINEXEC"
  5934.         bit 1: "LOADLIBRARY"
  5935.         bit 2: "OPENDRIVER"
  5936.  0Ah    WORD    "exec_cmd_show" (see #02639)
  5937.  0Ch    DWORD    "exec_cmd" pointer to command line to be executed
  5938.  10h  4 BYTEs    reserved (0)
  5939.  14h    DWORD    pointer to TSR ID block (see #02640)
  5940.  18h    DWORD    pointer to TSR data block or 0000h:0000h
  5941.  
  5942. (Table 02639)
  5943. Values for TSR information structure "exec_cmd_show":
  5944.  00h    HIDE
  5945.  01h    SHOWNORMAL
  5946.  02h    SHOWMINIMIZED
  5947.  03h    SHOWMAXIMIZED
  5948.  04h    SHOWNOACTIVE
  5949.  05h    SHOW
  5950.  06h    MINIMIZE
  5951.  07h    SHOWMINNOACTIVE
  5952.  08h    SHOWNA
  5953.  09h    RESTORE
  5954. Note:    this value is passed as the second parameter to the WinExec(),
  5955.       LoadLibrary(), or OpenDriver() call used to execute a requested
  5956.       command line
  5957. SeeAlso: #02638
  5958.  
  5959. Format of Norton Utilities 6.0 TSR ID block:
  5960. Offset    Size    Description    (Table 02640)
  5961.  00h    WORD    length of name string
  5962.  02h  N BYTEs    name of TSR's executable
  5963. SeeAlso: #02638
  5964. --------W-2F160C-----------------------------
  5965. INT 2F - MS Windows 3.1 - DETECT ROMs
  5966.     AX = 160Ch
  5967.     ???
  5968. Return: ???
  5969. Note:    used by ROM Windows; appears to be a NOP under standard Windows95
  5970. SeeAlso: AX=160Bh,INT 21/AH=6Dh"ROM"
  5971. --------D-2F160E-----------------------------
  5972. INT 2F U - MS-DOS 7 kernel - BOOT LOGO SUPPORT???
  5973.     AX = 160Eh
  5974.     BL = subfunction
  5975.         00h get ???
  5976.         AX = state of flag manipulated by subfn 04h and 05h
  5977.             0000h clear
  5978.             FFFFh set
  5979.         DX = ??? (0000h)
  5980.         01h link in INT 10h??? handlers
  5981.         02h unlink INT 10h??? handlers
  5982.         03h ???
  5983.         04h set ??? flag
  5984.         05h clear ??? flag
  5985. Return: AX = 0000h if supported
  5986.         ???
  5987. SeeAlso: AX=160Fh,AX=1611h,AX=1614h
  5988. --------D-2F160F-----------------------------
  5989. INT 2F U - MS-DOS 7 kernel - GET/SET ??? HANDLER
  5990.     AX = 160Fh
  5991.     BL = subfunction
  5992.         00h get ??? handler
  5993.         Return: AX = 0000h if supported
  5994.                 CX:DX -> handler to which control is passed after
  5995.                       ??? executes
  5996.         01h set ??? handler
  5997.         CX:DX -> new handler for ???
  5998.         Return: AX = 0000h if supported
  5999. Notes:    this function is not supported if ??? in the IO.SYS drivers portion of
  6000.       the kernel is an IRET instruction (as is the case on my system)
  6001.       rather than a FAR JMP
  6002.     the indicated handler seems to be related to INT 10 processing
  6003. SeeAlso: AX=160Eh,AX=1611h,AX=1614h
  6004. --------m-2F1610-----------------------------
  6005. INT 2F - XMS v1.x only - GET DRIVER ADDRESS
  6006.     AX = 1610h
  6007.     details unavailable
  6008. Note:    this function and AX=1600h were only used in XMS version 1 and are now
  6009.       obsolete.  Use AX=4300h and AX=4310h instead
  6010. SeeAlso: AX=1600h,AX=4310h
  6011. --------D-2F1611-----------------------------
  6012. INT 2F U - MS-DOS 7 kernel - GET SHELL PARAMETERS
  6013.     AX = 1611h
  6014. Return: AX = 0000h if supported
  6015.         DS:DX -> primary shell's executable name
  6016.         DS:SI -> prinary shell command line (counted string)
  6017.         BH = ??? (00h)
  6018.         BL = ??? (00h)
  6019. Desc:    return the program name and commandline from the CONFIG.SYS SHELL=
  6020.       statement
  6021. SeeAlso: AX=160Eh,AX=160Fh,AX=1612h,AX=4A33h
  6022. --------D-2F1612-----------------------------
  6023. INT 2F U - MS-DOS 7 kernel - GET ???
  6024.     AX = 1612h
  6025. Return: AX = 0000h if supported
  6026.         ES:BX -> ??? data (see #02641)
  6027. Note:    called by VTD.VXD
  6028. SeeAlso: AX=160Fh,AX=1611h,AX=1613h
  6029.  
  6030. Format of DOS7 ??? kernel data:
  6031. Offset    Size    Description    (Table 02641)
  6032.  00h    WORD    ??? (0001h)
  6033.  02h    DWORD    -> ??? function (call with DS=high word of this field)
  6034.         the indicated function vectors through the INT 13 hook at
  6035.           0070h:00B4h and then forces the A20 gate open
  6036.     ???
  6037. --------D-2F1613-----------------------------
  6038. INT 2F - MS-DOS 7 kernel - GET SYSTEM.DAT (REGISTRY FILE) PATHNAME
  6039.     AX = 1613h
  6040.     ES:DI -> buffer for full ASCIZ pathname to Windows95 SYSTEM.DAT
  6041.     CX = buffer size in bytes
  6042. Return: AX = 0000h if supported
  6043.         ES:DI buffer filled
  6044.         CX = number of bytes copied into buffer
  6045. SeeAlso: AX=160Eh,AX=1611h,AX=1612h,AX=1614h,AX=1690h
  6046. --------D-2F1614-----------------------------
  6047. INT 2F U - MS-DOS 7 kernel - SET SYSTEM.DAT (REGISTRY FILE) PATHNAME
  6048.     AX = 1614h
  6049.     ES:DI -> ASCIZ pathname to Windows95 SYSTEM.DAT
  6050. Return: AX = status
  6051.         0000h if successful
  6052.         1614h not supported
  6053.         other: maximum length of pathname (004Eh for v4.00.950)
  6054. SeeAlso: AX=160Eh,AX=1611h,AX=1613h,AX=1690h
  6055. ----------2F1615-----------------------------
  6056. INT 2F - Windows95 - SAVE32.COM - INSTALLATION CHECK
  6057.     AX = 1615h
  6058. Return: AX = 0000h if installed
  6059.         BX = segment of resident code
  6060. Program: SAVE32.COM is a TSR included in the Windows95 distribution which
  6061.       preserves the contents of 32-bit registers across invocations of
  6062.       all of the hardware interrupt handlers (which, for some older BIOSes
  6063.       and TSRs, do not properly preserve the high words of the 32-bit
  6064.       registers)
  6065. --------W-2F1680-----------------------------
  6066. INT 2F - MS Windows, DPMI, various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE
  6067.     AX = 1680h
  6068. Return: AL = status
  6069.         00h if the call is supported
  6070.         80h (unchanged) if the call is not supported
  6071. Notes:    programs can use this function in idle loops to enhance performance
  6072.       under multitaskers; this call is supported by MS Windows 3+, DOS 5+,
  6073.       DPMI 1.0+, and in OS/2 2.0+ for multitasking DOS applications
  6074.     does not block the program; it just gives up the remainder of the time
  6075.       slice
  6076.     should not be used by Windows-specific programs
  6077.     when called very often without intermediate screen output under
  6078.       MS Windows 3.x, the VM will go into an idle-state and will not
  6079.       receive the next slice before 8 seconds have elapsed. This time can
  6080.       be changed in SYSTEM.INI through "IdleVMWakeUpTime=<seconds>".
  6081.       Setting it to zero results in a long wait.
  6082.     this function has no effect under OS/2 2.10-4.0 if the DOS box has an
  6083.       "Idle Sensitivity" setting of 100
  6084. SeeAlso: AX=1689h,INT 15/AX=1000h,INT 15/AX=5305h,INT 21/AH=89h,INT 7A/BX=000Ah
  6085. --------W-2F1681-----------------------------
  6086. INT 2F - MS Windows 3+ - BEGIN CRITICAL SECTION
  6087.     AX = 1681h
  6088. Notes:    used to prevent a task switch from occurring
  6089.     should be followed by an INT 2F/AX=1682h call as soon as possible
  6090.     nested calls are allowed, and must be followed by an appropriate number
  6091.       of "end critical section" calls
  6092.     not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and
  6093.       increment by hand.
  6094. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h
  6095. --------W-2F1682-----------------------------
  6096. INT 2F - MS Windows 3+ - END CRITICAL SECTION
  6097.     AX = 1682h
  6098. Notes:    not supported in Windows/386 2.x.  Get InDOS flag with INT 21/AH=34h
  6099.       and decrement by hand, taking care not to decrement InDOS flag
  6100.       through zero
  6101. SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h
  6102. --------W-2F1683-----------------------------
  6103. INT 2F - MS Windows 3+ - GET CURRENT VIRTUAL MACHINE ID
  6104.     AX = 1683h
  6105. Return: BX = current virtual machine (VM) ID
  6106. Notes:    Windows itself currently runs in VM 1, but this can't be relied upon
  6107.     VM IDs are reused when VMs are destroyed
  6108.     an ID of 0 will never be returned
  6109. SeeAlso: AX=1684h"DEVICE API",AX=1685h,AX=168Bh
  6110. --------W-2F1684-----------------------------
  6111. INT 2F - MS Windows - GET DEVICE API ENTRY POINT
  6112.     AX = 1684h
  6113.     BX = virtual device (VxD) ID (see #02642)
  6114.     ES:DI = 0000h:0000h
  6115. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  6116. Note:    some Windows enhanced-mode virtual devices provide services that
  6117.       applications can access.  For example, the Virtual Display Device
  6118.       (VDD) provides an API used in turn by WINOLDAP.
  6119. SeeAlso: AX=1684h/BX=0001h,AX=1684h/BX=0015h,AX=1683h,AX=4011h,INT 20"Windows"
  6120.  
  6121. (Table 02642)
  6122. Values for MS Windows VxD ID:
  6123. Value    Name   CallOut V86 PM    Description
  6124.  0000h    ACT200L            IrDA Infrared ActiSys framer VxD
  6125.  0000h    ACT220L            IrDA Infrared ActiSys 220 framer VxD
  6126.  0000h    ADAPTEC            IrDA Infrared Adaptec framer VxD
  6127.  0000h    AM1500T        N  N    (Win95)
  6128.  0000h    ATI        N  N    (Win95) ATI display driver
  6129.  0000h    CDFS        N  N
  6130.  0000h    CDTSD        N  N    (Win95) CD-ROM Type-Specific Driver
  6131.  0000h    CE2NDIS3    N  N    (W4Wg)
  6132.  0000h    CENDIS        N  N    (W4Wg)
  6133.  0000h    CHIPS        N  N    (Win95) Chips&Tech display driver
  6134.  0000h    CIRRUS        N  N    (Win95) Cirrus display driver
  6135.  0000h    CTNDW        N  N    (W4Wg)
  6136.  0000h    CTVSD        N  N    (Win95) CD-ROM Vendor-Specific Driver
  6137.  0000h    CM2NDIS3    N  N    (W4Wg)
  6138.  0000h    COMBUFF        N  N    (Win95)
  6139.  0000h    COMPAQ        N  N    (Win95) Compaq display driver
  6140.  0000h    CPQNDIS3    N  N    (W4Wg)
  6141.  0000h    CRYSTAL            IrDA Infrared Crystal framer VxD
  6142.  0000h    CWCENUM        N  N    (Win95SR2???)
  6143.  0000h    CWCSPUD3    N  N    (Win95SR2???)
  6144.  0000h    DBKVSSD        N  N    (Win95) Databook PCMCIA socket services???
  6145.  0000h    DDOM95        N  N
  6146.  0000h    DECLAN        N  N    (W4Wg)
  6147.  0000h    DiskTSD        N  N    (Win95) hard-disk Type-Specific Driver
  6148.  0000h    DiskVSD        N  N    (Win95) hard-disk Vendor-Specific Driver
  6149.  0000h    DMICTVXD    N  N
  6150.  0000h    DMMDVDX        N  N    Diamond MaximumDVD
  6151.  0000h    DRVSPACX    N  N    (Win95)
  6152.  0000h    E30N3        N  N    (W4Wg)
  6153.  0000h    E31N3        N  N    (W4Wg)
  6154.  0000h    EE16        N  N    (W4Wg)
  6155.  0000h    EISA        N  N    (Win95)
  6156.  0000h    EL59X        N  N    (Win95)
  6157.  0000h    ELNK16        N  N    (W4Wg)
  6158.  0000h    ELNK3        N  N    (Win95)
  6159.  0000h    ELNKII        N  N    (W4Wg)
  6160.  0000h    ELNKMC        N  N    (W4Wg)
  6161.  0000h    ELPC3        N  N    (W4Wg)
  6162.  0000h    ENABLE2        N  N    (Win95)
  6163.  0000h    ENABLE4        N  N    (Win95)
  6164.  0000h    EPRO        N  N    (Win95)
  6165.  0000h    ES1488V        N  N    (Win95)
  6166.  0000h    ES1688V        N  N    (Win95)
  6167.  0000h    ES488V        N  N    (Win95)
  6168.  0000h    ES688V        N  N    (Win95)
  6169.  0000h    ESI            IrDA Infrared ESI framer VxD
  6170.  0000h    FILEMON        N  N    DOS386 File Monitor
  6171.  0000h    FLS1MTD        N  N    (Win95) flash-memory driver???
  6172.  0000h    FLS2MTD        N  N    (Win95) flash-memory driver???
  6173.  0000h    HPEISA        N  N    (W4Wg)
  6174.  0000h    HPFEND        N  N    (W4Wg)
  6175.  0000h    HPISA        N  N    (W4Wg)
  6176.  0000h    HPMCA        N  N    (W4Wg)
  6177.  0000h    HSFLOP        N  N
  6178.  0000h    IBMTOK        N  N    (W4Wg)
  6179.  0000h    IBMTOK4        N  N    (Win95)
  6180.  0000h    IRCOMM            IrDA Infrared Virtual COM/LPT driver
  6181.  0000h    IRLAMPEX        IrDA Infrared Protocol VxD
  6182.  0000h    IRLAPFRM        IrDA Infrared Virtual COM/LPT frame driver
  6183.  0000h    IRMATRAK    N  N    (W4Wg)
  6184.  0000h    JAVASUP        N  N    Internet Explorer JAVA support
  6185.  0000h    KEYREMAP    N  N    (Windows95 PowerToys) shift-key remapper
  6186.  0000h    LPT         N    N  N    (Win4Workgroups 3.11) DOS386 LPT Device
  6187.  0000h    LPTENUM        N  N
  6188.  0000h    MONVSD
  6189.  0000h    MGA        N  N    (Win95) Matrox MGA display driver
  6190.  0000h    MSMINI        N  N    (Win95)
  6191.  0000h    MSODISUP     N    N  N    (Win4Workgroups 3.11) MS ODI Support
  6192.  0000h    mvpas        N  N    (Win95) Pro Audio Spectrum driver
  6193.  0000h    NECATAPI    N  N    (Win95)
  6194.  0000h    NICE        N  N    (Win95)
  6195.  0000h    NV3        N  N    (Win95SR2)
  6196.  0000h    NWNBLINK     N    N  N    (Win4Workgroups 3.11) Netware NetBIOS
  6197.  0000h    OAK        N  N    (Win95) Oak Tech display driver
  6198.  0000h    OCTK32        N  N    (W4Wg)
  6199.  0000h    OTCETH        N  N    (W4Wg)
  6200.  0000h    PARALINK    N  N    (Win95)
  6201.  0000h    PARALLAX        IrDA Infrared Parallax framer VxD
  6202.  0000h    PCNTN3        N  N    (W4Wg)
  6203.  0000h    PE3NDIS        N  N    (W4Wg)
  6204.  0000h    PPM        N  N    (Win95)
  6205.  0000h    PROTEON        N  N    (W4Wg)
  6206.  0000h    QEMMFix        N  N
  6207.  0000h    QIC117        N  N    (Win95) QIC-117 floppy-ctrl tape drive
  6208.  0000h    QPI        N  N    QEMM Programming Interface (see INT 67/AH=3Fh)
  6209.  0000h    RMM        N  N    Real-Mode Mapper for hw with real-mode drivers
  6210.  0000h    S3        N  N    (Win95) S3 display driver
  6211.  0000h    S3INFO        N  N
  6212.  0000h    S3MINI        N  N    S3 display driver
  6213.  0000h    SAGE        N  N    (Plus!) System Agent
  6214.  0000h    scsi1hlp    N  N    (Win95)
  6215.  0000h    SERENUM        N  N
  6216.  0000h    SERIAL         N    N  N    (Win4Workgroups 3.11) DOS386 Serial Device
  6217.  0000h    SERWAVE        N  N
  6218.  0000h    SETP3        N  N    (Win95) Silicon Ethernet Pocket Adapter
  6219.  0000h    SMARTVSD    N  N    (EZ-SMART???)
  6220.  0000h    SMC8000W    N  N    (W4Wg)
  6221.  0000h    SMC80PC        N  N    (W4Wg)
  6222.  0000h    SMC8100W    N  N    (W4Wg)
  6223.  0000h    SMC8232W    N  N    (W4Wg)
  6224.  0000h    SMC9000        N  N    (W4Wg)
  6225.  0000h    SNIP        N  N    (W4Wg)
  6226.  0000h    SOCKET        N  N    (W4Wg)
  6227.  0000h    SOCKETSV    N  N    (Win95)
  6228.  0000h    SPAP        Y  Y    (Win95)
  6229.  0000h    SPENDIS        N  N    (Win95)
  6230.  0000h    SRAMMTD        N  N    (Win95) flash-memory driver???
  6231.  0000h    STLTH64        N  N    Diamond Stealth64 driver
  6232.  0000h    STLTHMON    N  N
  6233.  0000h    T20N3        N  N    (W4Wg)
  6234.  0000h    T30N3        N  N    (W4Wg)
  6235.  0000h    TCTOK        N  N    (W4Wg)
  6236.  0000h    TSENG        N  N    (Win95) Tseng Labs display driver
  6237.  0000h    UBNEI        N  N    (W4Wg)
  6238.  0000h    UNIMODEM        (Win95) Universal Modem Driver
  6239.  0000h    VDEF        N  N    (Win95)
  6240.  0000h    VGATEWAY    N  Y    (Win95) dialin gateway
  6241.  0000h    VIDEO7        N  N    (Win95) Video7 display driver
  6242.  0000h    VRomD        N  N    (Win95)
  6243.  0000h    VStDspcD        Quarterdeck Stealth D*Space
  6244.  0000h    VXDMON
  6245.  0000h    WD        N  N    (Win95)
  6246.  0000h    WINTOP        N  N    (Windows95 Power Toys)
  6247.  0000h    WSHTCP        N  N
  6248.  0000h    XGA        N  N    (Win95) XGA display driver
  6249.  0001h    VMM        N  N    Virtual Machine Manager
  6250.  0001h    VMM        Y  Y    Windows95 Virtual Machine Manager
  6251.  0002h    Debug
  6252.  0003h    VPICD        Y  Y    Virtual Prog. Interrupt Controller (PIC) Device
  6253.  0004h    VDMAD        N  N    Virtual Direct Memory Access (DMA) Device
  6254.  0005h    VTD        Y  Y    Virtual Timer Device
  6255.  0006h    V86MMGR         Y    N  N    (Windows3.x) Virtual 8086 Mode Device
  6256.  0006h    V86MMGR        N  Y    (Win95) Virtual 8068 Mode Device
  6257.  0007h    PageSwap    N  N    Paging Device
  6258.  0008h    Parity        N  N    Parity-check trapper
  6259.  0009h    Reboot        N  Y    Ctrl-Alt-Del handler
  6260.  000Ah    VDD        N  Y    Virtual Display Device (GRABBER)
  6261.  000Bh    VSD        N  N    Virtual Sound Device
  6262.  000Ch    VMD         Y    Y  Y    Virtual Mouse Device
  6263.  000Dh    VKD        N  Y    Virtual Keyboard Device
  6264.  000Eh    VCD        N  Y    Virtual COMM Device
  6265.  000Fh    VPD        N  Y    Virtual Printer Device
  6266.  0010h    VHD            Virtual Hard Disk Device (Windows 3.0)
  6267.  0010h    BLOCKDEV     Y    N  N    Virtual Hard Disk Device (Windows 3.1)
  6268.  0010h    IOS         N    N  N    (Win4Workgroups 3.11) DOS386 IOS Device
  6269.  0010h    IOS        Y  Y    Windows95 I/O Supervisor
  6270.  0011h    VMCPD        Y  Y    (Windows3.x) Virtual Math CoProcessor Device
  6271.  0011h    VMCPD        N  Y    (Win95) Virtual Math CoProcessor Device
  6272.  0012h    EBIOS        N  N    Reserve EBIOS page (e.g., on PS/2)
  6273.  0013h    BIOSXLAT    N  N    Map ROM BIOS API between prot & V86 mode
  6274.  0014h    VNETBIOS     Y    N  N    Virtual NetBIOS Device
  6275.  0015h    DOSMGR         Y    Y  N    DOS data instancing (see #02656)
  6276.  0016h    WINLOAD
  6277.  0017h    SHELL        N  Y    (Windows3)
  6278.  0017h    SHELL        Y  Y    (Win95)
  6279.  0018h    VMPOLL         Y    N  N
  6280.  0019h    VPROD
  6281.  001Ah    DOSNET        N  N    assures network integrity across VMs
  6282.  001Ah    VNETWARE    Y  Y    Novell NetWare DOSNET replacement
  6283.  001Bh    VFD        N  N    Virtual Floppy Device
  6284.  001Ch    VDD2            Secondary display adapter
  6285.  001Ch    LoadHi        N  N    Netroom LoadHi Device (RMLODHI.VXD)
  6286.  001Ch    LoadHi        N  N    386MAX LoadHi Device (386MAX.VXD)
  6287.  001Ch    LoadHi        N  N    Win386 LoadHi Device (EMM386.EXE)
  6288.  001Dh    WINDEBUG    N  Y
  6289.  001Dh    TDDebug        N  Y
  6290.  001Eh    TSRLoad            TSR instance utility
  6291.  001Fh    BiosHook        BIOS interrupt hooker VxD
  6292.  0020h    Int13         N    N  N
  6293.  0021h    PageFile     Y    N  Y    Paging File device
  6294.  0022h    SCSI
  6295.  0022h    APIX        N  Y    (Win95)
  6296.  0023h    MCA_POS            Microchannel Programmable Option Select
  6297.  0024h    SCSIFD            SCSI FastDisk device
  6298.  0025h    VPEND            Pen device
  6299.  0026h    APM            Advanced Power Management
  6300.  0026h    VPOWERD        Y  Y    (Win95) power management
  6301.  0027h    VXDLDR         N    Y  Y    (Win4Wg 3.11/Win95) VXD Loader
  6302.  0028h    NDIS         N    Y  Y    (Win4Wg 3.11) Network Driver Interface Spec
  6303.  0029h    ???
  6304.  002Ah    VWIN32        N  Y    (Win95)
  6305.  002Bh    VCOMM         N    Y  Y    (Win4Workgroups 3.11) DOS386 VCOMM Device
  6306.  002Ch    SPOOLER        N  N    Windows95 print spooler
  6307.  002Dh    W32S         Y    N  Y    WIN32s 32-bit extension to Windows API
  6308.  002Eh    ???
  6309.  002Fh    ???
  6310.  0030h    MACH32         N    N  Y    ATI Mach32 video card
  6311.  0031h    NETBEUI         N    N  N    (Win4Workgroups 3.11) NETBEUI
  6312.  0032h    SERVER         N    Y  Y    (Win4Workgroups 3.11) Int21 File Server
  6313.  0032h    VSERVER        N  Y    (Win95) Int21 File Server
  6314.  0033h    CONFIGMG    Y  Y    (Win95)
  6315.  0033h    EDOS        N  N    Windows DOS Box Enhancer by Mom's Software
  6316.  0034h    DWCFGMG.SYS    Y    DOS Plug-and-Play configuration manager
  6317.  0035h    SCSIPORT    N  N    (Win95) virtualized access to SCSI adapter
  6318.  0036h    VFBACKUP    Y  Y    (Win95)
  6319.  0037h    ENABLE        Y  Y    (Win95)
  6320.  0038h    VCOND        Y  Y    (Win95)
  6321.  0039h    ???
  6322.  003Ah    VPMTD         N    N  Y    (Win4Workgroups 3.11) IFAX Scheduler Device
  6323.  003Bh    DSVXD        Y  N    DoubleSpace VxD from MS-DOS v6.x
  6324.  003Ch    ISAPNP        N  N    (Win95)
  6325.  003Dh    BIOS        Y  Y    (Win95)
  6326.  003Eh    WSOCK        Y  Y    (Win95) WinSock
  6327.  003Fh    WSIPX        N  N    (Win95) IPX WinSock
  6328.  0040h    IFSMGR        N  N    (Win95)
  6329.  0041h    VCDFSD        N  N    (Win95) CD-ROM File System Driver (MSCDEX)
  6330.  0042h    MRCI2        N  N    (Win95) DriveSpace3
  6331.  0043h    PCI        N  N    (Win95)
  6332.  0048h    PERF        N  N    (Win95)
  6333.  004Ah    MTRR        N  N    (Win95SR2) PPro/P-II MTRR enumerator???
  6334.  004Bh    NTKERN        N  Y    (Win95SR2)
  6335.  0051h    ISAPNP        N  N    (Win95) ISA Plug-and-Play manager
  6336.  008Dh    ESDI_506    N  N    (Win95) MFM/RLL/ESDI disk driver
  6337.  0090h    voltrack    N  N    (Win95) Volume Tracker
  6338.  00FDh    FAKEIDE        N  N    (Chicago)
  6339.  0102h    CV1        N  N    Microsoft C/C++ 7.00+ CodeView for Windows
  6340.  011Fh    VFLATD        N  Y    (Win95)
  6341.  0200h    VIPX        Y  Y    NetWare Virtual IPX Driver
  6342.  0200h    VTEMPD            dummy template driver by Ray Patch
  6343.  0201h    VNWLSERV    N  N    NetWare Lite 1.1 Server (SERVER.EXE)
  6344.  0202h    WINICE        Y  Y    SoftICE/W
  6345.  0202h    SICE        Y  Y
  6346.  0203h    VCLIENT        N  Y    NetWare Lite 1.1+ Client
  6347.  0205h    VCAFT        N  N    Novell Virtual CAFT Driver (LANalyzer for Win)
  6348.  0205h    BCW        Y  Y    Nu-Mega Bounds Checker for Windows
  6349.  0206h    VTXRX        N  N    Novell Virtual TXRX Driver (LANalyzer for Win)
  6350.  0207h    DPMS         N    Y  N    Novell DOS Protected Mode Services
  6351.  0234h    VCOMMUTE    Y  Y    PC Tools Commute
  6352.  0442h    VTDAPI        N  Y    MMSys Win386 VTAPI Device
  6353.  0443h    ???
  6354.  0444h    VADMAD            Autoinitialize DMA (Windows 3.0)
  6355.  0445h    VSBD        Y  Y    WinResKit: Sound Blaster Device
  6356.  0446h    VADLIBD         Y    Y  Y    MMSys Win386 AdLib Device (v3.x)
  6357.  0447h    ???
  6358.  0448h    SETULTRA        Gravis UltraSound setup
  6359.  0449h    vjoyd        N  Y    (Win95) joystick
  6360.  044Ah    mmdevldr    Y  Y    (Win95)
  6361.  044Bh    ???
  6362.  044Ch    msmpu401    N  N    (Win95) MPU-401 MIDI driver
  6363.  044Ch    cwdmidi        Y  Y    (Crystal???) MIDI driver
  6364.  044Dh    msopl        N  N    (Win95) OPL-3 (SoundBlaster FM) driver
  6365.  044Eh    mssblst        N  N    (Win95) SoundBlaster MIDI driver
  6366.  045Dh    VflatD        N  Y    dva.386, part of WIN32s
  6367.  045Eh    ???
  6368.  045Fh    mssndsys        Microsoft Sound System audio driver
  6369.  045Fh    azt16        Y  Y    Aztech Sound Galaxy 16 audio driver
  6370.  0460h    UNIMODEM    N  Y    Universal Modem driver
  6371.  0480h    VNetSup         N    Y  Y    (Win4Workgrps 3.11) Virtual Network Support
  6372.  0481h    VRedir         N    N  N    (Win4Workgroups 3.11) Redirector File System
  6373.  0481h    VREDIR        N  N    (Win95) Redirector File System driver
  6374.  0482h    VBrowse        Y  Y    Win386 Virtual Browser
  6375.  0482h    SNAPVXD        Y  Y    (Win95)
  6376.  0483h    VSHARE        N  N    (Win4Workgroups) Virtual SHARE
  6377.  0483h    VSHARE        Y  Y    (Win95) Virtual SHARE
  6378.  0484h    IFSMgr         Y    N  Y    (Win4Wg 3.11) Installable File System Manager
  6379.  0485h    ???            ???
  6380.  0486h    VFAT         N    Y  Y    (Win4Workgroups 3.11) Win386 HPFS Driver
  6381.  0487h    NWLINK        Y  Y    Win386 Virtual Packet Exchange Protocol
  6382.  0487h    NWSUP         Y    N  N    NetWare Vnetbios shim
  6383.  0488h    VTDI        N  N    (Win95)
  6384.  0489h    VIP        Y  N    (Win95)
  6385.  0489h    FTCVIP        Y  Y    Frontier Technologies' VIP
  6386.  048Ah    VTCP        Y
  6387.  048Ah    MSTCP        Y  N    (Win95) TCP stack
  6388.  048Ah    FTCTDI        Y  Y    Future Technologies' TCP stack
  6389.  048Bh    VCache         N    Y  Y    (Win4Workgroups 3.11) Virtual File Cache
  6390.  048Bh    VCACHE        Y  Y    (Win95) disk cache
  6391.  048Ch    ???            ???
  6392.  048Dh    RASMAC        Y  Y    enhanced mode Win4Workgroups RASMAC device
  6393.  048Eh    NWREDIR        Y  Y    (Win95)
  6394.  048Fh    ???            ???
  6395.  0490h    ???            ???
  6396.  0491h    FILESEC            (Win95) File Access Control Manager
  6397.  0492h    NWSERVER        (Win95)
  6398.  0493h    SECPROV            (Win95) Security Provider
  6399.  0494h    NSCL        Y  Y    (Win95)
  6400.  0495h    AFVXD        N  N    (Win95)
  6401.  0496h    NDIS2SUP        (W4Wg???)
  6402.  0497h    MSODISUP    N  N    (W4Wg???)
  6403.  0498h    Splitter    N  N    (Win95)
  6404.  0499h    PPPMAC        Y  Y    (Win95)
  6405.  049Ah    VDHCP        Y  Y    (Win95)
  6406.  049Bh    VNBT        Y  Y    (Win95) NetBIOS-over-TCP/IP driver
  6407.  049Ch    ???
  6408.  049Dh    LOGGER            (Win95)
  6409.  04A2h    IRLAMP            IrDA Infrared Enumerator VxD
  6410.  097Ch    PCCARD        N  Y    (Win95) (see INT 20/VxD=097Ch)
  6411.  1020h    VCV            Microsoft C/C++ 7.00 CodeView
  6412.  1021h    VMB        Y  Y    Microsoft C/C++ 7.00 WXSRVR
  6413.  1022h    Vpfd        Y  Y    Microsoft C/C++ 7.00
  6414.  1025h    MMD        Y  Y    Microsoft C/C++ 8.00, Visual C/C++ 1.00
  6415.  2020h    PIPE        Y  Y    by Thomas W. Olson, in Windows/DOS DevJrn 5/92
  6416.  21EAh    VADLIBWD    N  Y    Adlib Waveform Driver by John Ridges
  6417.  2200h    VFINTD        Y  Y    Norton VFINTD (Norton Desktop)
  6418.  22C0h    ???         Y        Rational Systems DOS/4GW ???
  6419.  2402h    ZMAX        N  N    Qualitas 386MAX v7 DOSMAX handler
  6420.  24A0h    VNSS        N  Y    Norton Screen Saver (Norton Desktop)
  6421.  24A1h    VNDWD        Y  Y    Norton VNDWD Device (Norton Desktop)
  6422.  24A2h    SYMEvent    Y  Y    Norton Utilities v8
  6423.  2540h    VILD        Y  N    INTERLNK client from MS-DOS v6.x
  6424.  2640h    VASBID        N  Y    WinResKit: Artisoft Sounding Board Device
  6425.  2860h    COMMTASK     N    N  Y    Windows 386-mode preemptive tasker by James
  6426.                   A. Kenemuth of Interabang Computing
  6427.  28A0h    PHARLAPX    Y    PharLap inter-VM communications DLL
  6428.  28A1h    PharLap         Y    Y  Y    PharLap 386|DOS-Extender DOSXNT.386
  6429.  28C0h    VXD         N    Y  Y    Generic VxD for real and protected mode by
  6430.                   Andrew Schulman in MSJ February 1993
  6431.  28C1h    PUSHKEYS        VKD_Force_Keys device
  6432.  28C2h    VCR3D            Virtual CR3, by A.Schulman in MSJ October 1992
  6433.  2925h    EDOS        Y  Y    Enhanced DOS by Firefly Software
  6434.  292Dh    VSBPD        Y  Y    Sound Blaster Pro
  6435.  295Ah    GRVSULTR    Y  Y    Gravis UltraSound / UltraSound ACE
  6436.  3048h    FTCTCPIP    N  Y    Frontier Technologies' TCP/IP stack
  6437.  3049h    ???            (called by FNFSC32.VXD, FrontierTech's VNFSD)
  6438.  304Ch    DWCFGMG.SYS    Y    Plug-and-Play configuration access
  6439.  3098h    VstlthD         N    N  N    for QEMM Stealth ROM mode
  6440.  3099h    VVidramD    Y  N    for QEMM VIDRAM support
  6441.  30F6h    WSVV        N  Y    (Win95) WinSock for Voice-View Modems???
  6442.  310Eh    WPS        N  Y    MS DevNet CD-ROM: Windows Process Status
  6443.  3110h    VGSSD        Y  Y    VSGLX16.386 for Aztech Sound Galaxy 16
  6444.  313Bh    PMC            Power Management Coordinator
  6445.  318Ah    LMOUSE        Y  Y    (Win95) Logitech mouse???
  6446.  31CFh    STAT.386        Ton Plooy's processor statistics VxD
  6447.  3202h    VdspD        N  N    (Win95)
  6448.  3203h    vpasd        N  N    (Win95) Pro Audio Spectrum driver
  6449.  32A4h    SBAWE        Y  Y    (Win95) SoundBlaster AWE driver
  6450.  32A5h    VSB16        N  N    (Win95) SoundBlaster 16 driver
  6451.  32CBh    VFRAD        Y  Y    Dr.Franz - Simultan's diagnotics VFRAD.386
  6452.  32DCh    NV3RM        N  Y    (Win95SR2)
  6453.  3354h    Discover    N  Y    (Nuts&Bolts) Discover
  6454.  33AAh    DECCORE        Y  Y    (Win95) DEC Pathworks core VxD
  6455.  33B4h    DECLICL        N  N    (Win95)
  6456.  33F0h    VIWD        Y  Y    Gravis UltraSound Plug-n-Play Interwave v1.x
  6457.  33FCh    ASPIENUM    N  N    (Win95)
  6458.  34DCh    MAGNARAM    N  Y    Quarterdeck MagnaRAM (MAGNA31.VXD/MAGNA95.VXD)
  6459.  357Eh    DSOUND        Y  Y    (Win95) DirectSound
  6460.  3584h    VSNDSYS        Y  Y    (Win95SR2)
  6461.  35C5h    LUGEPS        Y  Y    Lugaru's Epsilon editor
  6462.  36AEh    AIB-PC.386    Y  Y    Sunset Laboratory interface hardware driver
  6463.  377Bh    MX1501HAD        Cherry keyboard chipcard reader
  6464.  38BEh    Vheapx        N  Y    (Nuts&Bolts) Virtual Heap Expander
  6465.  38C0h    Bombshel    N  Y    (Nuts&Bolts) Bombshelter
  6466.  38DAh    VIWD        Y  Y    UltraSound PnP InterWave driver v2.0beta
  6467.  39E6h    A3D        N  N    (Win95SR2)
  6468.  3BFCh    CWCSPUD        N  N    (Win95SR2)
  6469.  3BFDh    CWCPROXY    N  N    (Win95SR2)
  6470.  3BFEh    CWCMMSYS    N  Y    (Win95SR2)
  6471.  3BFFh    CWCDSND        N  N    (Win95SR2)
  6472.  3C78h    VGARTD        N  N    (Win95SR2)
  6473.  3EE5h    WINTEL.VXD        "WinTel" Windows remote-control program
  6474.                 (see also PORT 063Eh)
  6475.  4321h    POSTMSG        Y  Y    (see #02712)
  6476.  4321h    VPCD        N  N    PCache
  6477.  4321h    avvxp500    N  N    (Win95) VxP500 driver
  6478.  6001h    REGVXD        Y  Y    Windows95 Registry Monitor helper
  6479.  7A5Fh    SIWVID         Y    Y  Y    Soft-ICE for Windows video driver
  6480.  7FE0h    VSWITCHD    Y  N    by Jeff Prosise
  6481.  7FE0h    VWFD         N    Y  Y    reports windowed/fullscreen state; by Neil
  6482.                   Sandlin of Microsoft, shipped with ANSIPLUS
  6483.  7FE1h    VWATCHD         N    Y  Y    basic driver w/ no functionality except tracing
  6484.                   by Keith Jin of Microsoft PSS
  6485.  7FE5h    VFINTD         N    Y  Y    Virtual Floppy Interrupt trapper by Neil
  6486.                   Sandlin of Microsoft
  6487.  7FE7h    VMPAGES         N    Y  Y    demonstration of exporting VxD services, by
  6488.                   Neil Sandlin of Microsoft
  6489.  7FE8h    VPOSTD        Y  Y    PostMessage() demo by Curtis J. Palmer of MS
  6490.  7FE9h    VIdleD         N    N  N    demonstration of Call_When_Idle function, by
  6491.                   Bernie McIlroy of Microsoft
  6492.  7FEBh    VMIOD         N    N  N    Virtual Monitor I/O Traffic Device, by Neil
  6493.                   Sandlin of Microsoft
  6494.  7FEDh    VMIRQD         N    N  N    Virtual Monitor IRQ Traffic Device, by Neil
  6495.                   Sandlin of Microsoft
  6496.  8888h    VbillD            Bill Potvin II's for reversing Compaq LTE video
  6497.  EEEEh    VEPSD        N  N    Virtual Extended Paging Services for
  6498.                   Borland C++ v4.0
  6499. Notes:    The high bit of the VxD ID is reserved for future use. Originally,
  6500.       the next 10 bits were the OEM number which was assigned by Microsoft,
  6501.       and the low 5 bits were the device number.  Currently, Microsoft
  6502.       assigns VxD IDs individually for each driver; send blank email to
  6503.       vxdid@microsoft.com for more information.
  6504.     "CallOut"=Y indicates that the VxD uses the INT 2F/AX=1607h/BX=VxDID
  6505.       device callout interface; "PM" and "V86" indicate whether the VxD
  6506.       provides an API entry point in protected mode and Virtual-86 mode
  6507.       (e.g. DOS boxes)
  6508. --------W-2F1684BX0001-----------------------
  6509. INT 2F - MS Windows95 - VMM - GET API ENTRY POINT
  6510.     AX = 1684h
  6511.     BX = 0001h (virtual device ID for VMM) (see #02642)
  6512.     ES:DI = 0000h:0000h
  6513. Return: ES:DI -> VxD API entry point (see #02643)
  6514.           0000h:0000h if the VxD does not support an API
  6515. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6516.  
  6517. (Table 02643)
  6518. Call Windows VMM 16-bit entry point with:
  6519.     AX = function number
  6520.         ---registry functions---
  6521.         0100h "RegOpenKey"
  6522.         STACK:    DWORD    -> DWORD for returned key handle
  6523.             DWORD    -> ASCIZ registry key name
  6524.             DWORD    HKEY (see #02644)
  6525.         0101h "RegCreateKey"
  6526.         STACK:    DWORD    -> DWORD for returned key handle
  6527.             DWORD    -> ASCIZ registry key name
  6528.             DWORD    HKEY (see #02644)
  6529.         0102h "RegCloseKey"
  6530.         STACK:    DWORD    key handle from RegOpenKey or RegCreateKey
  6531.         0103h "RegDeleteKey"
  6532.         STACK:    DWORD    -> ASCIZ registry key name
  6533.             DWORD    HKEY (see #02644)
  6534.         0104h "RegSetValue"
  6535.         STACK:    DWORD    ???
  6536.             DWORD    -> ???
  6537.             DWORD    ???
  6538.             DWORD    -> ???
  6539.             DWORD    HKEY (see #02644)
  6540.         0105h "RegQueryValue"
  6541.         STACK:    DWORD    -> DWORD for ???
  6542.             DWORD    -> ASCIZ ???
  6543.             DWORD    -> ASCIZ ???
  6544.             DWORD    HKEY (see #02644)
  6545.         0106h "RegEnumKey"
  6546.         STACK:    DWORD    ???
  6547.             DWORD    -> ASCIZ ???
  6548.             DWORD    ???
  6549.             DWORD    HKEY (see #02644)
  6550.         0107h "RegDeleteValue"
  6551.         0108h "RegEnumValue"
  6552.         STACK:    DWORD    -> DWORD for ???
  6553.             DWORD    -> BYTE ???
  6554.             DWORD    -> DWORD for ???
  6555.             DWORD    -> DWORD for ???
  6556.             DWORD    -> DWORD for ???
  6557.             DWORD    -> ASCIZ ???
  6558.             DWORD    ???
  6559.             DWORD    HKEY (see #02644)
  6560.         0109h "RegQueryValueEx"
  6561.         010Ah "RegSetValueEx"
  6562.         010Bh "RegFlushKey"
  6563.         010Ch "RegLoadKey"
  6564.         010Dh "RegUnLoadKey"
  6565.         010Eh "RegSaveKey"
  6566.         010Fh "RegRestore"
  6567.         0110h "RegRemapPreDefKey"
  6568. Return: parameters popped from stack
  6569.     DX:AX = return value
  6570.  
  6571. (Table 02644)
  6572. Values for Windows95 VMM predefined HKEY values:
  6573.  80000000h    HKEY_CLASSES_ROOT
  6574.  80000001h    HKEY_CURRENT_USER
  6575.  80000002h    HKEY_LOCAL_MACHINE
  6576.  80000003h    HKEY_USERS
  6577.  80000004h    HKEY_PERFORMANCE_DATA
  6578.  80000005h    HKEY_CURRENT_CONFIG
  6579.  80000006h    HKEY_DYN_DATA
  6580. SeeAlso: #02643
  6581. --------W-2F1684BX0003-----------------------
  6582. INT 2F - MS Windows - VPICD - GET API ENTRY POINT
  6583.     AX = 1684h
  6584.     BX = 0003h (virtual device ID for VPICD device) (see #02642)
  6585.     ES:DI = 0000h:0000h
  6586. Return: ES:DI -> VxD API entry point (see #02645)
  6587.           0000h:0000h if the VxD does not support an API
  6588. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6589.  
  6590. (Table 02645)
  6591. Call VPICD API entry point with:
  6592.     EAX = function number
  6593.         0000h get version
  6594.         Return: AX = binary version (AH=major, AL=minor)
  6595.         0001h virtualize timer???
  6596.         0002h unvirtualize timer???
  6597. --------W-2F1684BX0005-----------------------
  6598. INT 2F - MS Windows - VTD - GET API ENTRY POINT
  6599.     AX = 1684h
  6600.     BX = 0005h (virtual device ID for VTD device) (see #02642)
  6601.     ES:DI = 0000h:0000h
  6602. Return: ES:DI -> VxD API entry point (see #02646)
  6603.           0000h:0000h if the VxD does not support an API
  6604. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6605.  
  6606. (Table 02646)
  6607. Call VTD.386/VTD.VXD entry point with:
  6608.     AX = function number
  6609.         0000h get VTD version number
  6610.         Return: CF clear
  6611.             AH = major version
  6612.             AL = minor version
  6613.         0100h get current clock tick time
  6614.         Return: EDX:EAX = clock tick time in 840ns units since Windows
  6615.                   was started
  6616.         0101h get current system time in milliseconds
  6617.         Return: EAX = time in milliseconds that Windows has been
  6618.                   running
  6619.         0102h get current virtual machine time
  6620.         Return: EAX = cumulative amount of time the virtual machine has
  6621.                   been active, in milliseconds
  6622. Note:    this entry point should only be called directly when TOOLHELP.DLL
  6623.       TimerCount() cannot be called
  6624. SeeAlso: #01268,#01270,#01269 at INT 20"Windows"
  6625. --------W-2F1684BX0006-----------------------
  6626. INT 2F P - MS Windows95 - V86MMGR - GET API ENTRY POINT
  6627.     AX = 1684h
  6628.     BX = 0006h (virtual device ID for V86MMGR device) (see #02642)
  6629.     ES:DI = 0000h:0000h
  6630. Return: ES:DI -> VxD API entry point (see #02647)
  6631.           0000h:0000h if the VxD does not support API in current mode
  6632. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6633.  
  6634. (Table 02647)
  6635. Call V86MMGR entry point with:
  6636.     EAX = function number
  6637.         0000h get V86MMGR version
  6638.         Return: CF clear
  6639.             AH = major version
  6640.             AL = minor version
  6641.         0001h get ???
  6642.         Return: CF clear
  6643.             EAX = status bits
  6644.                 bit 0: ???
  6645.                 bit 1: ???
  6646.                 bit 2: ???
  6647.                 bit 3: ???
  6648.                 bit 4: ???
  6649.         else
  6650.         Return: CF set
  6651. --------W-2F1684BX0009-----------------------
  6652. INT 2F P - MS Windows - REBOOT - GET API ENTRY POINT
  6653.     AX = 1684h
  6654.     BX = 0009h (virtual device ID for REBOOT device) (see #02642)
  6655.     ES:DI = 0000h:0000h
  6656. Return: ES:DI -> VxD API entry point (see #02648)
  6657.           0000h:0000h if the VxD does not support an API
  6658. SeeAlso: INT 14/AH=17h"FOSSIL",INT 16/AX=E0FFh
  6659.  
  6660. (Table 02648)
  6661. Call REBOOT protected-mode entry point with:
  6662.     AX = function
  6663.         0100h warm boot
  6664.         Return: never
  6665.         Note:    broadcasts "Reboot_Processor" message, which is caught
  6666.               by the VKD device
  6667.         0201h set KERNEL Ctrl-Alt-Del handler
  6668.         ES:DI -> new Ctrl-Alt-Del handler
  6669.         DS:SI -> KERNEL reboot sanity check byte
  6670.         Return: CF clear
  6671.         Notes:    if an application installs its own handler and then
  6672.               chains to Windows' handler, Windows will no longer
  6673.               be able to detect hung applications, and will always
  6674.               produce an "Application not responding" dialog
  6675.             DS must contain a writable, fixed selector because
  6676.               the provided address is converted to a linear address
  6677.               before being stored
  6678.             when Ctrl-Alt-Del is pressed in the system VM, Reboot
  6679.               sets the sanity check byte to zero, schedules a
  6680.               750ms wait, and then tests whether the check byte is
  6681.               still zero; if not, it displays a message that there
  6682.               is no hung application and then exits
  6683.         0202h get KERNEL Ctrl-Alt-Del handler
  6684.         Return: CF clear
  6685.             ES:DI -> current Ctrl-Alt-Del handler
  6686.         Note:    the default handler is located in KERNEL
  6687.         0203h display "Application not responding" dialog box
  6688.         ES:DI -> ASCIZ name of hung application
  6689.         Return: never if user pressed Ctrl-Alt-Del a second time
  6690.             CF clear
  6691.             AX = result
  6692.                 0000h user pressed Esc
  6693.                 0001h user pressed Enter
  6694.         Note:    this function is used by the default Windows
  6695.               Ctrl-Alt-Del handler
  6696.         0204h set/reset protected-mode INT 01 handler
  6697.         CX:EDX -> new protected-mode INT 01 handler
  6698.         CX = 0000h restore protected-mode INT 01 handler
  6699.         Return: CF clear
  6700.         Notes:    if CX is nonzero, the current handler address is saved
  6701.               internally before the new handler is set; this saved
  6702.               address is then used when CX is zero on entry
  6703.             used by Windows' default Ctrl-Alt-Del handler; actual
  6704.               fatal exit to DOS will be done on next INT 01
  6705.         Warning: opened files are not closed and remain open as
  6706.               orphaned files in DOS
  6707. Note:    functions 0201h and 0203h are not useful outside the system VM
  6708. SeeAlso: #01271,#01273
  6709. --------W-2F1684BX000A-----------------------
  6710. INT 2F P - MS Windows - VDD - GET API ENTRY POINT
  6711.     AX = 1684h
  6712.     BX = 000Ah (virtual device ID for VDD device) (see #02642)
  6713.     ES:DI = 0000h:0000h
  6714. Return: ES:DI -> VxD API entry point (see #02649)
  6715.           0000h:0000h if the VxD does not support API in current mode
  6716. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6717.  
  6718. (Table 02649)
  6719. Call VDD entry point with:
  6720.     EAX = function
  6721.         0000h get VDD version
  6722.         Return: CF clear
  6723.             AH = major version
  6724.             AL = minor version
  6725.         Note:    also performs an internal initialization
  6726.         0001h ???
  6727.         Return: ECX = ???
  6728.             ???
  6729.         0002h
  6730.         0003h
  6731.         0004h
  6732.         0005h
  6733.         0006h
  6734.         0007h
  6735.         0008h
  6736.         0009h
  6737.         0080h
  6738.         0081h
  6739.         0082h
  6740.         0083h
  6741.         0084h
  6742.         0085h
  6743.         0086h
  6744.         0087h
  6745.         0088h
  6746.         0089h
  6747.         else
  6748.         Return: nothing
  6749. --------W-2F1684BX000C-----------------------
  6750. INT 2F - MS Windows - VMD - GET API ENTRY POINT
  6751.     AX = 1684h
  6752.     BX = 000Ch (virtual device ID for VMD device) (see #02642)
  6753.     ES:DI = 0000h:0000h
  6754. Return: ES:DI -> VxD API entry point (see #02650)
  6755.           0000h:0000h if the VxD does not support API in current mode
  6756. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6757.  
  6758. (Table 02650)
  6759. Call VMOUSE entry point with:
  6760.     EAX = function number
  6761.         0000h get VMOUSE version
  6762.         Return: CF clear
  6763.             AH = major version
  6764.             AL = minor version
  6765.         0001h
  6766.         EBX = ???
  6767.         ECX = ???
  6768.         Return: CF clear if successful
  6769.             CF set on error (e.g. fn 0003h not yet called)
  6770.         0002h ??? (calls "test system VM handle")
  6771.         Return: CF clear if successful (in system VM)
  6772.             CF set on error
  6773.         0003h ???
  6774.         ECX = ???
  6775.         DX = ???
  6776.         Return: CF clear
  6777.         0004h ???
  6778.         Note: invokes Call_Priority_VM_Event
  6779.         0005h get mouse port data
  6780.         Return: CF clear
  6781.             AL = ??? (04h)
  6782.             AH = mouse IRQ interrupt number (IRQ4=0Ch,etc.)
  6783.             CX = mouse I/O port address (e.g. 03F8h)
  6784.             DX = COM port number??? (0001h for mouse on COM1)
  6785.         0100h NOP???
  6786.         Return: CF clear
  6787.         0101h init???
  6788.         Return: CF clear
  6789.         Note:    appears to be the same as fn 0005h, but returns no data
  6790.         0102h unimplemented
  6791.         Return: CF set
  6792.         0103h check ???
  6793.         Return: AX = status (0000h/0001h)
  6794.         Note:    checks flag set by fn 0003h
  6795.         else
  6796.         Return: CF set
  6797. SeeAlso: #02649,#02651
  6798. --------W-2F1684BX000D-----------------------
  6799. INT 2F P - MS Windows - VKD - GET API ENTRY POINT
  6800.     AX = 1684h
  6801.     BX = 000Dh (virtual device ID for VKD device) (see #02642)
  6802.     ES:DI = 0000h:0000h
  6803. Return: ES:DI -> VxD API entry point (see #02651)
  6804.           0000h:0000h if the VxD does not support API in current mode
  6805. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6806.  
  6807. (Table 02651)
  6808. Call VKD entry point with:
  6809.     EAX = function
  6810.         0000h get VKD version
  6811.         Return: CF clear
  6812.             AH = major version
  6813.             AL = minor version
  6814.         0001h ???
  6815.         EBX = VM handle or 00000000h to use ??? VM handle
  6816.         CH = ???
  6817.         CL = ???
  6818.         EDX = ??? or FFFFFFFFh
  6819.         Return: CF clear if successful
  6820.             CF set on error
  6821.         else
  6822.         Return: CF set
  6823. SeeAlso: #02650,#02652
  6824. --------W-2F1684BX000E-----------------------
  6825. INT 2F P - MS Windows - VCD - GET API ENTRY POINT
  6826.     AX = 1684h
  6827.     BX = 000Eh (virtual device ID for VCD device) (see #02642)
  6828.     ES:DI = 0000h:0000h
  6829. Return: ES:DI -> VxD API entry point (see #02652)
  6830.           0000h:0000h if the VxD does not support API in current mode
  6831. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6832.  
  6833. (Table 02652)
  6834. Call VCD entry point with:
  6835.     EDX = function number
  6836.         0000h get VCD version
  6837.         Return: CF clear
  6838.             AH = major version
  6839.             AL = minor version
  6840.         0001h get ???
  6841.         Return: CF clear
  6842.             AX = bit mask of ???
  6843.         0002h get ???
  6844.         CX = COM port number
  6845.         Return: CF clear
  6846.             DX:AX -> ???
  6847.         0003h set ???
  6848.         CX = COM port number
  6849.         DX:AX -> new ???
  6850.         Return: CF clear
  6851.         0004h acquire COM port
  6852.         AX = ???
  6853.         CX = COM port number
  6854.         Return: CF clear
  6855.             AX = ???
  6856.             EBX = ???
  6857.             DX = ???
  6858.         0005h release COM port
  6859.         CX = COM port number
  6860.         Return: CF clear
  6861.         0006h ???
  6862.         Return: CF set
  6863.             AL = 00h
  6864.         else
  6865.         Return: CF set
  6866.             EAX = FFFFFFFFh
  6867. Note:    these functions are apparently only available from the system VM,
  6868.       returning CF set and EAX=FFFFFFFFh otherwise
  6869. SeeAlso: #02651,#02653
  6870. --------W-2F1684BX000F-----------------------
  6871. INT 2F P - MS Windows - VPD - GET API ENTRY POINT
  6872.     AX = 1684h
  6873.     BX = 000Fh (virtual device ID for VPD device) (see #02642)
  6874.     ES:DI = 0000h:0000h
  6875. Return: ES:DI -> VxD API entry point (see #02653)
  6876.           0000h:0000h if the VxD does not support API in current mode
  6877. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6878.  
  6879. (Table 02653)
  6880. Call VPD entry point with:
  6881.     EDX = function number
  6882.         0000h get VPD version
  6883.         Return: CF clear
  6884.             AH = major version
  6885.             AL = minor version
  6886.             DX = ??? (CB01h)
  6887.         0001h get valid??? printers
  6888.         Return: CF clear
  6889.             AX = bitmask of ??? printers (bits 0-2)
  6890.         0002h get ??? for printer
  6891.         CX = printer port (0-2)
  6892.         Return: CF clear if successful
  6893.                 BX:AX = ???
  6894.             CF set on error (invalid port number)
  6895.         0003h set ??? for printer
  6896.         CX = printer port (0-2)
  6897.         BX:AX = ???
  6898.         Return:    CF clear if successful
  6899.             CF set on error (invalid port number)
  6900.         0004h ???
  6901.         CX = printer port (0-2)
  6902.         EAX = VM handle
  6903.         Return:    CF clear if successful
  6904.             CF set on error (invalid port number)
  6905.         0005h ???
  6906.         CX = printer port (0-2)
  6907.         EAX = VM handle
  6908.         Return:    CF clear if successful
  6909.             CF set on error (invalid port number or ???)
  6910.         0006h-000Eh unused
  6911.         Return: CF set
  6912.         000Fh ???
  6913.         CX = printer port (0-2)
  6914.         AX = ???
  6915.         Return:    CF clear if successful
  6916.             CF set on error (e.g. invalid port number)
  6917.         0010h ???
  6918.         CX = printer port (0-2)
  6919.         Return:    CF clear if successful
  6920.             CF set on error (e.g. invalid port number)
  6921.         0011h ???
  6922.         CX = printer port (0-2)
  6923.         Return:    CF clear if successful
  6924.             CF set on error (e.g. invalid port number)
  6925.         0012h get port status
  6926.         CX = printer port (0-2)
  6927.         Return:    CF clear if successful
  6928.                 AX = port status (see #P0658 at PORT 03BCh"LPT")
  6929.             CF set on error (e.g. invalid port number)
  6930.         else
  6931.         Return: CF set
  6932. Note:    these functions are apparently only available from the system VM,
  6933.       returning CF set
  6934. SeeAlso: #02652,#02654
  6935. --------W-2F1684BX0010-----------------------
  6936. INT 2F - MS Windows - IOS - GET API ENTRY POINT
  6937.     AX = 1684h
  6938.     BX = 0010h (virtual device ID for IOS device) (see #02642)
  6939.     ES:DI = 0000h:0000h
  6940. Return: ES:DI -> VxD API entry point (see #02654)
  6941.           0000h:0000h if the VxD does not support API in current mode
  6942. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6943.  
  6944. (Table 02654)
  6945. Call IOS entry point with:
  6946.     EAX = function number
  6947.         0000h ???
  6948.         Return: CF clear if successful
  6949.                 AX = 0000h
  6950.             CF set on error
  6951.                 AX = FFFFh
  6952.         0001h check if ???
  6953.         Return: CF clear if successful
  6954.                 AX = 0000h
  6955.             CF set on error
  6956.                 AX = FFFFh
  6957.         0002h requestor services???
  6958.         DL = service number???
  6959.         Return: CF clear if successful
  6960.                 AX = 0000h
  6961.                 DX = ???
  6962.             CF set on error
  6963.                 AX = FFFFh
  6964.         Note:    calls "IOS_Requestor_Service" (see INT 20"Windows")
  6965.         0003h ??? (copies five bytes of data internally)
  6966.         Return: CF clear if successful
  6967.                 AX = 0000h
  6968.                 EDX = ???
  6969.             CF set on error
  6970.                 AX = FFFFh
  6971.         else
  6972.         Return: CF set
  6973.             AX = FFFFh
  6974. SeeAlso: #02653,#02655
  6975. --------W-2F1684BX0011-----------------------
  6976. INT 2F - MS Windows - VMCPD - GET API ENTRY POINT
  6977.     AX = 1684h
  6978.     BX = 0011h (virtual device ID for VMCPD device) (see #02642)
  6979.     ES:DI = 0000h:0000h
  6980. Return: ES:DI -> VxD API entry point (see #02655)
  6981.           0000h:0000h if the VxD does not support API in current mode
  6982. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  6983.  
  6984. (Table 02655)
  6985. Call Windows95 VMCPD protected-mode entry point with:
  6986.     EAX = function number
  6987.         0000h get VMCPD version
  6988.         Return: CF clear
  6989.             AH = major version
  6990.             AL = minor version
  6991.         0001h get ??? flags
  6992.         Return: CF clear
  6993.             AX = ??? flags
  6994.                 bit 0: ???
  6995.                 bit 1: ???
  6996.                 bit 2: ???
  6997.                 bit 3: ???
  6998.         else
  6999.         Return: CF set
  7000. SeeAlso: #02654,#02656
  7001. --------W-2F1684BX0015-----------------------
  7002. INT 2F - MS Windows - DOSMGR - GET API ENTRY POINT
  7003.     AX = 1684h
  7004.     BX = 0015h (virtual device ID for DOSMGR device) (see #02642)
  7005.     ES:DI = 0000h:0000h
  7006. Return: ES:DI -> VxD API entry point (see #02656,#01282)
  7007.           0000h:0000h if the VxD does not support an API
  7008. SeeAlso: #01282 at INT 20"Windows"
  7009.  
  7010. (Table 02656)
  7011. Call DOSMGR entry point with:
  7012.     AX = 0000h get DOSMGR version
  7013.         Return: CF clear
  7014.             AX = version (AH = major, AL = minor)
  7015.     AX = 0001h set critical focus
  7016.         Return: CF clear
  7017.     AX = 0002h crash current virtual machine
  7018.         Return: never
  7019.         Note:   displays message box stating that "application has been
  7020.               stopped by the DOSMGR device"
  7021.     AX = 0003h enter critical section
  7022.         Note:   this function assumes that the code for INT 2A/AX=8001h
  7023.               and INT 2A/AX=8002h have been modified for Windows
  7024.     AX = 0004h get VM ID byte
  7025.         Return: CF clear if successful
  7026.             ES:DI -> VM ID byte
  7027.             CF set on error
  7028.         Note:   this function fails if the INT 2A modifications have not
  7029.               yet been applied
  7030.     AX = 0005h inform Windows of possible media change
  7031.         BL = drive number (00h=A:)
  7032.         Return: CF clear if successful
  7033.             CF set on error
  7034. SeeAlso: #01282 at INT 20"Windows",#02655,#02657
  7035. --------W-2F1684BX0017-----------------------
  7036. INT 2F U - MS Windows - SHELL - GET API ENTRY POINT
  7037.     AX = 1684h
  7038.     BX = 0017h (virtual device ID for SHELL device) (see #02642)
  7039.     ES:DI = 0000h:0000h
  7040. Return: ES:DI -> VxD API entry point (see #02657)
  7041.           0000h:0000h if the VxD does not support an API
  7042. SeeAlso: AX=1684h/BX=0021h,#01283 at INT 20"Windows"
  7043.  
  7044. (Table 02657)
  7045. Call SHELL entry point with:
  7046.     EDX = function number (0000h-0027h,0100h-0108h, mostly unknown)
  7047.         0000h get version number
  7048.         Return: AX = version number
  7049.             EBX = system VM handle
  7050.         0001h "SHELL_Get_SYSVM_Info" get system VM information
  7051.         Return: CF clear
  7052.             AX bit 0 set if system VM executing exclusively
  7053.             BX = background time slice priority
  7054.             CX = foreground time slice priority
  7055.             SI = minimum time slice in milliseconds
  7056.         0002h "SHELL_Set_SYSVM_Info" set system VM information
  7057.         AX bit 0 set if system VM should execute exclusively (ignored?)
  7058.         BX = background time slice priority (1-10000)
  7059.         CX = foreground time slice priority (1-10000)
  7060.         SI = minimum time slice in milliseconds (1-10000)
  7061.         Return: CF clear if successful
  7062.         0003h "SHELL_Crt_VM" create a virtual machine
  7063.         ES:EDI -> SEB structure (see #02658)
  7064.         Return: CF clear if successful
  7065.                EAX = VM handle
  7066.             CF set on error
  7067.                EDX,EAX = result from GetSetDetailedVMError()
  7068.         0004h "SHELL_Destroy_VM" destroy a virtual machine
  7069.         EBX = VM handle (not system VM)
  7070.         Return: nothing
  7071.         0005h "SHELL_Set_Focus"
  7072.         EBX = VM handle
  7073.         ECX = ???
  7074.         Return: nothing
  7075.         0006h "SHELL_Get_VM_State"
  7076.         EBX = VM handle (not system VM)
  7077.         ES:EDI -> ??? structure
  7078.         Return: CF clear if successful
  7079.         0007h "SHELL_Set_VM_State"
  7080.         EBX = VM handle (not system VM)
  7081.         ES:EDI -> ??? structure
  7082.         0008h "SHELL_Debug_Out"
  7083.         ???
  7084.         Return: ???
  7085.         Note:    dummy function in retail version of MS Windows
  7086.         0009h "SHELL_VMDA_Init"
  7087.         ???
  7088.         Return: ???
  7089.         000Ah "SHELL_VMDA_Exit"
  7090.         ???
  7091.         Return: ???
  7092.         000Bh "SHELL_Get_Message_Txt"
  7093.         ???
  7094.         Return: ???
  7095.         000Ch "SHELL_Event_Complete"
  7096.         ???
  7097.         Return: ???
  7098.         000Dh "SHELL_Get_Contention_Info"
  7099.         ???
  7100.         Return: ???
  7101.         000Eh "SHELL_Get_Clip_Info"
  7102.         ???
  7103.         Return: ???
  7104.         000Fh "SHELL_Set_Paste"
  7105.         ???
  7106.         Return: ???
  7107.         0010h "SHELL_Switcher_Assist"
  7108.         ???
  7109.         Return: ???
  7110.         0011h "SHELL_Get_FileSysChng"
  7111.         ???
  7112.         Return: ???
  7113.         0012h "SHELL_Query_Destroy"
  7114.         ???
  7115.         Return: ???
  7116.         0013h "SHELL_SetFocus_Cur_VM" set input focus to current VM
  7117.         ???
  7118.         Return: ???
  7119.         0014h "SHELL_User_Busy_API"
  7120.         ???
  7121.         Return: ???
  7122.         0015h "SHELL_Chng_Hot_Key"
  7123.         ???
  7124.         Return: ???
  7125.         0016h "SHELL_Get_TermInfo"
  7126.         ???
  7127.         Return: ???
  7128.         ---Windows95---
  7129.         0017h ???
  7130.         0018h ???
  7131.         0019h ???
  7132.         001Ah ???
  7133.         001Bh ???
  7134.         001Ch ???
  7135.         001Dh ???
  7136.         001Eh ???
  7137.         001Fh ???
  7138.         0020h ???
  7139.         0021h ???
  7140.         0022h ???
  7141.         0023h ???
  7142.         0024h ???
  7143.         0025h ???
  7144.         0026h ???
  7145.         Note:    makes VxDCALL 00178002h (see INT 20"Windows")
  7146.         0027h ???
  7147.         0100h get ??? version
  7148.         Return: AX = version??? (0400h for Windows95)
  7149.         0101h not implemented
  7150.         Return: CF set
  7151.             EAX = FFFFFFFFh
  7152.         0102h not implemented
  7153.         Return: CF set
  7154.             EAX = FFFFFFFFh
  7155.         0103h not implemented
  7156.         Return: CF set
  7157.             EAX = FFFFFFFFh
  7158.         0104h ???
  7159.         0105h ???
  7160.         0106h ???
  7161.         ???
  7162.         Return: CF clear if successful
  7163.             CF set on error
  7164.         0107h get SDK version for VxD
  7165.         AX = VxD identifier
  7166.         Return: EAX = VxD ID (high word) and SDK version (low)
  7167.                 00000000h if no such VxD loaded
  7168.         Note:    makes a VMMCALL 0001013Fh (see INT 20"Windows")
  7169.               followed by ???
  7170.         0108h ???
  7171. Return: CF set if called from VM other than system VM
  7172.         EAX = FFFFFFFFh
  7173. Note:    except for functions 0013h,0026h,and 010xh, this API may only be
  7174.       called from the system VM
  7175. SeeAlso: #01283 at INT 20"Windows"
  7176.  
  7177. Format of Shell Execution Block (SEB):
  7178. Offset    Size    Description    (Table 02658)
  7179.  00h    DWORD    PIF flags (see #02659)
  7180.  04h    DWORD    display flags (see #02660)
  7181.  08h    PWORD    -> pathname of .EXE to run
  7182.  0Eh    PWORD    -> argument list
  7183.  14h    PWORD    -> working drive/directory
  7184.  1Ah    WORD    desired number of V86 pages for virtual machine
  7185.  1Ch    WORD    minimum number of V86 pages for VM
  7186.  1Eh    WORD    foreground priority
  7187.  20h    WORD    background priority
  7188.  22h    WORD    maximum KB of EMS
  7189.  24h    WORD    minimum KB of EMS
  7190.  26h    WORD    maximum KB of XMS
  7191.  28h    WORD    minimum KB of XMS
  7192.  2Ah    WORD    maximum KB of DPMI???
  7193.  2Ch    WORD    minimum KB of DPMI???
  7194.  2Eh 128 BYTEs    title
  7195. Note:    the PWORDs at offsets 08h,0Eh, and 14h consist of a DWORD offset
  7196.       followed by a WORD selector
  7197.  
  7198. Bitfields for 386 Enhanced Mode PIF flags:
  7199. Bit(s)    Description    (Table 02659)
  7200.  0    exclusive use of processor when VM is fullscreen
  7201.  1    VM runs in background
  7202.  2    VM runs in window
  7203.  3-4    ???
  7204.  5    Alt-Tab reserved
  7205.  6    Alt-Esc reserved
  7206.  7    Alt-Space reserved
  7207.  8    Alt-Enter reserved
  7208.  9    Alt-PrtSc reserved
  7209.  10    PrtSc reserved
  7210.  11    Ctrl-Esc reserved
  7211.  12    VM will release idle time slice
  7212.  13    VM not allowed to use high memory
  7213.  14    ???
  7214.  15    VM expanded memory not pageable
  7215.  16    VM extended memory not pageable
  7216.  17    Fast paste from clipboard enabled
  7217.  18    VM application memory not pageable
  7218.  30    Close VM when application exits
  7219. SeeAlso: #02658,#02660
  7220.  
  7221. Bitfields for SHELL display options:
  7222. Bit(s)    Description    (Table 02660)
  7223.  0    emulate text mode
  7224.  1    monitor text port
  7225.  2    monitor low graphics port
  7226.  3    monitor high graphics port
  7227.  7    Retain video memory
  7228. SeeAlso: #02658,#02659
  7229. --------W-2F1684BX001A-----------------------
  7230. INT 2F - MS Windows - VNETWARE - GET API ENTRY POINT
  7231.     AX = 1684h
  7232.     BX = 001Ah (virtual device ID for VNETWARE device) (see #02642)
  7233.     ES:DI = 0000h:0000h
  7234. Return: ES:DI -> VxD API entry point
  7235.           0000h:0000h if the VxD does not support API in current mode
  7236. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7237. --------W-2F1684BX001D-----------------------
  7238. INT 2F P - MS Windows - WINDEBUG - GET API ENTRY POINT
  7239.     AX = 1684h
  7240.     BX = 001Dh (virtual device ID for WINDEBUG device) (see #02642)
  7241.     ES:DI = 0000h:0000h
  7242. Return: ES:DI -> VxD API entry point
  7243.           0000h:0000h if the VxD does not support API in current mode
  7244. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7245. --------W-2F1684BX0021-----------------------
  7246. INT 2F PU - MS Windows - PAGEFILE - GET API ENTRY POINT
  7247.     AX = 1684h
  7248.     BX = 0021h (virtual device ID for PAGEFILE device) (see #02642)
  7249.     ES:DI = 0000h:0000h
  7250. Return: ES:DI -> VxD API entry point (see #02661)
  7251.           0000h:0000h if the VxD does not support an API
  7252. SeeAlso: AX=1684h/BX=0017h,#01289 at INT 20"Windows"
  7253.  
  7254. (Table 02661)
  7255. Call PAGEFILE entry point with:
  7256.     AX = function
  7257.         0000h get version
  7258.         Return: CF clear
  7259.             AX = version (AH = major, AL = minor)
  7260.         0001h get swap file info
  7261.         DS:SI -> 128-byte buffer for swap file full pathname
  7262.         DS:DI -> 128-byte buffer for SPART.PAR full pathname
  7263.         Return: CF clear
  7264.             AL = pager type (see #02662)
  7265.             AH = flags
  7266.                 bit 7: swap file corrupted
  7267.             ECX = maximum size of swap file
  7268.             DS:SI buffer filled if paging enabled
  7269.             DS:DI buffer filled if permanent swap file
  7270.         0002h delete permanent swap file on exit
  7271.         Return: CF clear
  7272.         0003h get current temporary swap file size
  7273.         Return: CF clear
  7274.             DX:AX = current swap file size in bytes
  7275.                 0000h:0000h if permanent swap file
  7276. Note:    this API is only available in protected mode, and may only be called
  7277.       from the system VM
  7278. SeeAlso: #01289 at INT 20"Windows",#02663
  7279.  
  7280. (Table 02662)
  7281. Values for MS Windows PAGEFILE pager type:
  7282.  00h    paging disabled
  7283.  01h    MSDOS
  7284.  02h    BIOS
  7285.  03h    32-bit disk access
  7286. SeeAlso: #02661
  7287. --------W-2F1684BX0022-----------------------
  7288. INT 2F P - MS Windows - APIX - GET API ENTRY POINT
  7289.     AX = 1684h
  7290.     BX = 0022h (virtual device ID for APIX device) (see #02642)
  7291.     ES:DI = 0000h:0000h
  7292. Return: ES:DI -> VxD API entry point (see #02663)
  7293.           0000h:0000h if the VxD does not support API in current mode
  7294. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7295.  
  7296. (Table 02663)
  7297. Call APIX protected-mode entry point with:
  7298.     AH = function number
  7299.         00h get APIX version
  7300.         Return: CF clear
  7301.             AH = major version
  7302.             AL = minor version
  7303.         01h ???
  7304.         Return: CF clear
  7305.             AX = number of ???
  7306.         02h NOP
  7307.         Return: CF clear
  7308.         03h ???
  7309.         Return: CF clear
  7310.             AX = 0000h/FFFFh
  7311.         else
  7312.         Return: CF clear (bug?)
  7313. SeeAlso: #02661,#02666
  7314. --------W-2F1684BX0026-----------------------
  7315. INT 2F P - MS Windows - VPOWERD - GET API ENTRY POINT
  7316.     AX = 1684h
  7317.     BX = 0026h (virtual device ID for VPOWERD device) (see #02642)
  7318.     ES:DI = 0000h:0000h
  7319. Return: ES:DI -> VxD API entry point (see #02664)
  7320.           0000h:0000h if the VxD does not support API in current mode
  7321. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7322.  
  7323. (Table 02664)
  7324. Call VPOWERD.VXD entry point with:
  7325.     AX = function number
  7326.         0000h get VPOWERD version
  7327.         Return: DX = 0000h
  7328.             AX = version (AH = major, AL = minor)
  7329.         0001h get APM BIOS version
  7330.         Return: DX:AX = APM BIOS version
  7331.         0002h get current power management level
  7332.         Return: DX:AX = power management level
  7333.         0003h enable/disable power management (see INT 15/AX=5308h)
  7334.         ??? = new state of power management
  7335.         Return: DX:AX = 0000h:0000h if successful
  7336.                else error code (see #02665)
  7337.         0004h set power state (see INT 15/AX=5307h)
  7338.         Return: DX:AX = 0000h:0000h if successful
  7339.                else error code (see #02665)
  7340.         0005h set system power status
  7341.         Return: DX:AX = 0000h:0000h if successful
  7342.                else error code (see #02665)
  7343.         0006h restore APM power-on defaults (see INT 15/AX=5309h)
  7344.         Return: DX:AX = 0000h:0000h if successful
  7345.                else error code (see #02665)
  7346.         0007h get power status (see INT 15/AX=530Ah)
  7347.         Return: ???
  7348.         0008h get APM 1.1 power state (see INT 15/AX=530Ch)
  7349.         Return: ???
  7350.         0009h invoke OEM APM function
  7351.         ??? -> buffer containing parameters for INT 15/AX=5380h
  7352.         Return: DX:AX = 0000h:0000h or error code (see #02665)
  7353.             buffer updated if successful
  7354.         000Ah register power handler
  7355.         ???
  7356.         Return: DX:AX = 0000h:0000h or error code
  7357.         000Bh deregister power handler
  7358.         ???
  7359.         Return: DX:AX = 0000h:0000h or error code (see #02665)
  7360.         000Ch Win32 get system power status
  7361.         000Dh Win32 set system power status
  7362.         else
  7363.         Return: DX = 0000h
  7364.             AX = 00FFh
  7365. SeeAlso: #02663,#02666
  7366.  
  7367. (Table 02665)
  7368. Values for VPOWERD.VXD error code:
  7369.  000000xxh    APM error code
  7370.  000000FFh    function number out of range
  7371.  80000001h    ??? (service 05h)
  7372.  80000002h    ??? (service 0Dh)
  7373.  80000003h    specified NULL buffer pointer (service 07h,08h,09h)
  7374.  80000005h    ??? (service 03h)
  7375.  80000006h    ??? (service 04h)
  7376.  80000007h    ??? (service 05h)
  7377.  80000008h    ??? (service 05h)
  7378.  80000009h    out of memory (service 0Ah)
  7379.  8000000Ah    ??? (service 0Ah)
  7380.  8000000Bh    invalid power handler (service 0Bh)
  7381.  8000000Ch    unsupported/disabled??? function
  7382. SeeAlso: #02664,#01290
  7383. --------W-2F1684BX0027-----------------------
  7384. INT 2F - MS Windows95 - VXDLDR - GET API ENTRY POINT
  7385.     AX = 1684h
  7386.     BX = 0027h (virtual device ID for VXDLDR device) (see #02642)
  7387.     ES:DI = 0000h:0000h
  7388. Return: ES:DI -> VxD API entry point (see #02666)
  7389.           0000h:0000h if the VxD does not support API in current mode
  7390. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7391.  
  7392. (Table 02666)
  7393. Call VXDLDR entry point with:
  7394.     EAX = function number
  7395.         0000h get VXDLDR version
  7396.         Return: CF clear
  7397.             AX = 0000h (successful)
  7398.             DH = major version
  7399.             DL = minor version
  7400.         0001h load device
  7401.         BX = ASCIZ 8.3 filename of dynamically-loadable VxD (must
  7402.               reside in Windows system directory)
  7403.         Return: CF clear if successful
  7404.                 AX = 0000h
  7405.                 ES:DI -> VxD API entry point
  7406.             CF set on error
  7407.                 AX = error code (see #02667)
  7408.         0002h unload device
  7409.         BX = ASCIZ 8.3 filename of dynamically-loadable VxD (must
  7410.               reside in Windows system directory)
  7411.         Return: CF clear if successful
  7412.                 AX = 0000h
  7413.             CF set on error
  7414.                 AX = error code (see #02667)
  7415.         else
  7416.         Return: CF set
  7417.             AX = 000Bh
  7418. SeeAlso: #02664,#02668
  7419.  
  7420. (Table 02667)
  7421. Values for VXDLDR error code:
  7422.  0000h    successful
  7423.  000Bh    invalid function number
  7424. SeeAlso: #02666
  7425. --------W-2F1684BX0028-----------------------
  7426. INT 2F - MS Windows - NDIS - GET API ENTRY POINT
  7427.     AX = 1684h
  7428.     BX = 0028h (virtual device ID for NDIS device) (see #02642)
  7429.     ES:DI = 0000h:0000h
  7430. Return: ES:DI -> VxD API entry point (see #02668)
  7431.           0000h:0000h if the VxD does not support API in current mode
  7432. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7433.  
  7434. (Table 02668)
  7435. Call NDIS.VXD entry point with:
  7436.     ??? = function number
  7437.         0000h set ??? to ???
  7438.         ??? = new ???
  7439.         Return: DX:AX = 0000h:0001h
  7440.         0002h ???
  7441.         ???
  7442.         Return: DX:AX -> ???
  7443.         0003h reset ??? to default
  7444.         Return: DX:AX = 0000h:0001h
  7445.         else
  7446.         Return: DX:AX = 0000h:0000h
  7447. SeeAlso: #02666,#02669
  7448. --------W-2F1684BX002A-----------------------
  7449. INT 2F P - MS Windows - VWIN32 - GET API ENTRY POINT
  7450.     AX = 1684h
  7451.     BX = 002Ah (virtual device ID for VWIN32 device) (see #02642)
  7452.     ES:DI = 0000h:0000h
  7453. Return: ES:DI -> VxD API entry point (see #02669)
  7454.           0000h:0000h if the VxD does not support API in current mode
  7455. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7456.  
  7457. (Table 02669)
  7458. Call VWIN32.VXD entry point with:
  7459.     AH = function number
  7460.         00h get VWIN32 version and ???
  7461.         Return: CF clear
  7462.             AH = major version
  7463.             AL = minor version
  7464.             EDX = ???
  7465.         01h ???
  7466.         EBX = ???
  7467.         ECX = ???
  7468.         Return: CF clear
  7469.             EAX = ???
  7470.         02h ???
  7471.         Return: CF clear
  7472.             AX = ??? or 0000h
  7473.         03h address allocation
  7474.         DS:??? -> buffer containing/for page data
  7475.         ECX = length of buffer
  7476.         AL = subfunction
  7477.             00h reserve page(s)
  7478.             01h commit page(s)
  7479.             02h decommit page(s)
  7480.             03h free page(s)
  7481.         Return: CF clear if successful
  7482.             CF set on error
  7483.         Note:    this function uses ECX bytes of stack
  7484.         04h get ???
  7485.         Return: CF clear
  7486.             EAX = ???
  7487.         05h ???
  7488.         EBX = ???
  7489.         Return: CF clear
  7490.             EAX = ???
  7491.         06h ???
  7492.         EBX = ???
  7493.         Return: CF clear
  7494.             EAX = ???
  7495.         07h ???
  7496.         EBX = ???
  7497.         Return: CF clear
  7498.             EAX = ???
  7499.         08h get ???
  7500.         Return: CF clear
  7501.             AX = ???
  7502.         09h ???
  7503.         EBX = ???
  7504.         ECX = ???
  7505.         Return: CF clear
  7506.         0Ah ???
  7507.         EBX = ???
  7508.         Return: CF clear
  7509.         0Bh ???
  7510.         EBX = ???
  7511.         Return: CF clear
  7512.         0Ch ???
  7513.         EBX = ???
  7514.         ECX = ???
  7515.         EDX = ???
  7516.         ???
  7517.         Return: CF clear if successful
  7518.                 EAX = ???
  7519.             CF set on error
  7520.         0Dh clear ???
  7521.         Return: CF clear
  7522.         0Eh ???
  7523.         EBX = ???
  7524.         ECX = ???
  7525.         Return: CF clear
  7526.         0Fh ???
  7527.         EBX = ???
  7528.         ECX = ???
  7529.         Return: CF clear
  7530.         10h ???
  7531.         Return: CF clear
  7532.         Note:    invokes VMMcall 00010184h
  7533.         11h ???
  7534.         Return: CF clear
  7535.         Note:    invokes VMMcall 00010160h
  7536.         12h ???
  7537.         ???
  7538.         13h pop up system error dialogue
  7539.         Return: CF clear
  7540.             AX = ??? or 0000h
  7541.         14h "IFSMgr_GetConversionTablePtrs"
  7542.         Return:    CF clear
  7543.             DX:AX -> ???
  7544.         Note:    invokes VxDcall 00400051h
  7545.         15h "Boost_With_Decay"
  7546.         EBX = ???
  7547.         ECX = ???
  7548.         EDX = ???
  7549.         Return: CF clear
  7550.         else
  7551.         Return: CF set
  7552. SeeAlso: #02668,#02670
  7553. --------W-2F1684BX002B-----------------------
  7554. INT 2F - MS Windows - VCOMM - GET API ENTRY POINT
  7555.     AX = 1684h
  7556.     BX = 002Bh (virtual device ID for VCOMM device) (see #02642)
  7557.     ES:DI = 0000h:0000h
  7558. Return: ES:DI -> VxD API entry point (see #02670)
  7559.           0000h:0000h if the VxD does not support API in current mode
  7560. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7561.  
  7562. (Table 02670)
  7563. Call VCOMM.VXD entry point with:
  7564.     AX = function number
  7565.         0000h open COM/LPT port
  7566.         BX = port number (00h-7Fh = COMx, 80h-FFh = LPTx)
  7567.         Return: DX:AX = handle???
  7568.         0001h set comm state
  7569.         ???
  7570.         Return: AX = ???
  7571.         0002h setup comm port
  7572.         ???
  7573.         Return: AX = status (0000h failed, FFFFh success)
  7574.         0003h transmit character
  7575.         EBX = handle???
  7576.         CL = character to transmit
  7577.         Return: AX = status???
  7578.         0004h close comm port
  7579.         EBX = handle???
  7580.         Return: ???
  7581.         0005h clear comm error
  7582.         EBX = handle???
  7583.         EAX = ???
  7584.         Return: AX = status???
  7585.         0006h "EscapeCommFunction"
  7586.         EBX = handle???
  7587.         CX = ???
  7588.         EAX = ???
  7589.         Return: DX:AX = ???
  7590.         0007h purge buffers
  7591.         EBX = handle???
  7592.         CX = ???
  7593.         Return: AX = status???
  7594.         0008h set comm event mask
  7595.         EBX = handle???
  7596.         CX = new event mask
  7597.         Return: AX = status???
  7598.         0009h get comm event mask
  7599.         EBX = handle???
  7600.         Return: AX = current event mask
  7601.         000Ah ???
  7602.         EBX = handle???
  7603.         Return: ???
  7604.         000Bh "WriteComm"
  7605.         EBX = handle???
  7606.         CX = number of characters to write
  7607.         ES???:BX -> buffer (if CX > 1)
  7608.         SI??? low byte contains character if CX=1
  7609.         Return: AX = status
  7610.             EAX high word may be destroyed
  7611.         000Ch "ReadComm"
  7612.         EBX = handle???
  7613.         CX = number of bytes to read
  7614.         ES???:DI -> buffer
  7615.         Return: AX = status ???
  7616.             ZF = ???
  7617.         000Dh set ??? callback
  7618.         EBX = handle???
  7619.         CX = ???
  7620.         DX = ???
  7621.         Return: AX = status???
  7622.         else
  7623.         Return: AX = 0000h
  7624. SeeAlso: #02669,#02671
  7625. --------W-2F1684BX002D-----------------------
  7626. INT 2F P - MS Windows - W32S - GET API ENTRY POINT
  7627.     AX = 1684h
  7628.     BX = 002Dh (virtual device ID for W32S device) (see #02642)
  7629.     ES:DI = 0000h:0000h
  7630. Return: ES:DI -> VxD API entry point
  7631.           0000h:0000h if the VxD does not support API in current mode
  7632. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7633. --------W-2F1684BX0030-----------------------
  7634. INT 2F P - MS Windows - MACH32 - GET API ENTRY POINT
  7635.     AX = 1684h
  7636.     BX = 0030h (virtual device ID for MACH32 device) (see #02642)
  7637.     ES:DI = 0000h:0000h
  7638. Return: ES:DI -> VxD API entry point
  7639.           0000h:0000h if the VxD does not support API in current mode
  7640. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7641. --------W-2F1684BX0032-----------------------
  7642. INT 2F - MS Windows - SERVER / VSERVER - GET API ENTRY POINT
  7643.     AX = 1684h
  7644.     BX = 0032h (virtual device ID for SERVER device) (see #02642)
  7645.     ES:DI = 0000h:0000h
  7646. Return: ES:DI -> VxD API entry point (see #02671)
  7647.           0000h:0000h if the VxD does not support API in current mode
  7648. SeeAlso: AX=1684h"DEVICE API",#01296 at INT 20"Windows"
  7649.  
  7650. (Table 02671)
  7651. Call Windows95 VSERVER.VXD protected-mode entry point with:
  7652.     AX = function number
  7653.         0003h NOP
  7654.         Return: AX = 0000h
  7655.         0004h NOP
  7656.         Return: AX = 0000h
  7657.         0007h NOP
  7658.         Return: AX = 0000h
  7659.         0008h NOP
  7660.         Return: nothing
  7661.         000Fh ???
  7662.         Return: AX = status
  7663.                 0000h successful
  7664.                 0842h on error
  7665.         0010h ???
  7666.         Return: AX = status
  7667.                 0000h successful
  7668.                 0842h on error
  7669.         else
  7670.         Return: AX = 0032h
  7671. SeeAlso: #02670,#02672
  7672. --------W-2F1684BX0033-----------------------
  7673. INT 2F - MS Windows - CONFIGMG - GET API ENTRY POINT
  7674.     AX = 1684h
  7675.     BX = 0033h (virtual device ID for CONFIGMG device) (see #02642)
  7676.     ES:DI = 0000h:0000h
  7677. Return: ES:DI -> VxD API entry point (see #02672)
  7678.           0000h:0000h if the VxD does not support API in current mode
  7679. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7680.  
  7681. (Table 02672)
  7682. Call CONFIGMG.VXD entry point with:
  7683.     AX = function number
  7684.         0000h get CONFIGMG version
  7685.         Return: CF clear
  7686.             AH = major version
  7687.             AL = minor version
  7688.         ...
  7689.         005Ah
  7690.         else
  7691.         Return: CF set
  7692.             AX = 0020h
  7693. SeeAlso: #01297 at INT 20"Windows",#02671,#02673
  7694. --------x-2F1684BX0034-----------------------
  7695. INT 2F - Intel Plug-and-Play - CONFIGURATION MANAGER - GET ENTRY POINT
  7696.     AX = 1684h
  7697.     BX = 0034h (ID for Configuration Manager) (see #02642)
  7698.     ES:DI = 0000h:0000h
  7699. Return: ES:DI -> API entry point (see #02673)
  7700.           0000h:0000h if Configuration Manager not loaded
  7701. Note:    this API is often provided by a DOS device driver, in which case it
  7702.       is available whether or not MSWindows is running
  7703. Index:    installation check;Plug-and-Play Configuration Manager
  7704. SeeAlso: AX=1684h/BX=304Ch
  7705.  
  7706. (Table 02673)
  7707. Call Configuration Manager entry point with:
  7708.     AX = function
  7709.         0000h "CM_GetVersion" get supported DDI version
  7710.         Return: AH = BCD major version
  7711.             AL = BCD minor version
  7712.             BX = number of devices identified by configuration
  7713.         Note:    returns AX = 0000h if no config manager installed
  7714.         0001h "CM_GetConfig" get device configuration
  7715.         BX = device index
  7716.         ES:DI -> buffer for configuration information (see #02675)
  7717.         Return: AX = status
  7718.                 0000h successful
  7719.                 ES:DI buffer filled
  7720.                 other error code (0001h = index out of range)
  7721.         0002h "CM_LockConfig" lock device configuration
  7722.         ES:DI -> configuration information (see #02675)
  7723.         Return: AX = status
  7724.                 0000h successful
  7725.                 ES:DI buffer filled with assigned config
  7726.                 0001h resources conflict
  7727.                 0002h invalid request or configuration info
  7728.         0003h "CM_UnlockConfig" unlock device configuration
  7729.         ES:DI -> configuration information (see #02675)
  7730.         Return: AX = status
  7731.                 0000h successful
  7732.                 ES:DI buffer filled with assigned config
  7733.                 0001h invalid request or configuration info
  7734.         0004h "CME_QueryResources" get hot-swappable resources
  7735.         ES:DI -> configuration information (see #02675)
  7736.         Return: AX = status (see #02674)
  7737.         0005h "CME_AllocResources" remove resources from available pool
  7738.         ES:DI -> configuration information (see #02675)
  7739.         Return: AX = status (see #02674)
  7740.         0006h "CME_DeallocResources" return resources to available pool
  7741.         ES:DI -> configuration information (see #02675)
  7742.         Return: AX = status (see #02674)
  7743. SeeAlso: #01298 at INT 20"Windows",#02672,#02676
  7744.  
  7745. (Table 02674)
  7746. Values for Configuration Manager status:
  7747.  00h    successful
  7748.  01h    device not found, configuration error
  7749.  02h    I/O port unavailable
  7750.  04h    IRQ unavailable
  7751.  08h    DMA channel unavailable
  7752.  10h    memory range unavailable
  7753. SeeAlso: #02673
  7754.  
  7755. Format of Configuration Information Structure:
  7756. Offset    Size    Description    (Table 02675)
  7757.  00h    DWORD    bus ID
  7758.  04h    DWORD    device ID
  7759.  08h    DWORD    serial number
  7760.  0Ch    DWORD    logical ID
  7761.  10h    DWORD    flags
  7762. ---ISA bus---
  7763.  14h    BYTE    Card Select Number
  7764.  15h    BYTE    logical device number
  7765.  16h    WORD    Read Data port
  7766. ------
  7767.  18h    WORD    number of memory windows
  7768.  1Ah  9 DWORDs    physical base addresses of memory windows
  7769.  3Eh  9 DWORDs    length of memory windows
  7770.  62h  9 WORDs    memory window attributes
  7771.  74h    WORD    number of I/O ports
  7772.  76h 20 WORDs    I/O port base addresses
  7773.  B6h 20 WORDs    lengths of I/O port ranges
  7774.  F6h    WORD    number of IRQs
  7775.  F8h  7 BYTEs    IRQ registers
  7776.  FFh  7 BYTEs    IRQ attributes
  7777. 106h    WORD    number of DMA channels
  7778. 108h  7 BYTEs    DMA channels used
  7779. 10Fh  7 WORDs    DMA channel attributes
  7780. 11Dh  3 BYTEs    reserved
  7781. SeeAlso: #02673
  7782. --------W-2F1684BX0036-----------------------
  7783. INT 2F - MS Windows - VFBACKUP - GET API ENTRY POINT
  7784.     AX = 1684h
  7785.     BX = 0036h (virtual device ID for VFBACKUP device) (see #02642)
  7786.     ES:DI = 0000h:0000h
  7787. Return: ES:DI -> VxD API entry point (see #02676)
  7788.           0000h:0000h if the VxD does not support API in current mode
  7789. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7790.  
  7791. (Table 02676)
  7792. Call VFBACKUP.VXD entry point with:
  7793.     nothing -- this API is a NOP for the default Windows95 VFBACKUP
  7794. SeeAlso: #02673,#01126
  7795. --------W-2F1684BX0037-----------------------
  7796. INT 2F - MS Windows - ENABLE.VXD - GET API ENTRY POINT
  7797.     AX = 1684h
  7798.     BX = 0037h (virtual device ID for ENABLE device) (see #02677)
  7799.     ES:DI = 0000h:0000h
  7800. Return: ES:DI -> VxD API entry point (see #02676)
  7801.           0000h:0000h if the VxD does not support API in current mode
  7802. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7803.  
  7804. (Table 02677)
  7805. Call Windows95 ENABLE.VXD entry point with:
  7806.     AX = function number
  7807.         0000h get ENABLE version
  7808.         Return:    CF clear
  7809.             AX = version (AH = major, AL = minor)
  7810.         0001h
  7811.         EBX = ???
  7812.         Return: ???
  7813.         0002h get ???
  7814.         Return: CF clear
  7815.             DX:AX = ???
  7816.         0003h get ???
  7817.         Return: CF clear
  7818.             DX:AX = ???
  7819.         0004h ???
  7820.         EBX = ???
  7821.         ECX = ???
  7822.         EDX = ???
  7823.         Return: CF clear if successful
  7824.             CF set on error
  7825.         else
  7826.         Return: CF set
  7827. SeeAlso: #02676,#02678
  7828. --------W-2F1684BX0038-----------------------
  7829. INT 2F - MS Windows - VCOND - GET API ENTRY POINT
  7830.     AX = 1684h
  7831.     BX = 0038h (virtual device ID for VCOND device) (see #02642)
  7832.     ES:DI = 0000h:0000h
  7833. Return: ES:DI -> VxD API entry point (see #02678)
  7834.           0000h:0000h if the VxD does not support API in current mode
  7835. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7836.  
  7837. (Table 02678)
  7838. Call VCOND.VXD virtual-86 entry point with:
  7839.     AX = function number
  7840.         0202h
  7841.         0203h
  7842.         0204h
  7843.         0205h
  7844.         0206h
  7845.         0207h
  7846.         0208h
  7847.         0209h
  7848.         020Ah
  7849.         020Bh
  7850.         020Dh
  7851.         020Eh
  7852.         020Fh
  7853.         0210h
  7854.         0401h
  7855.         0402h
  7856.         0403h
  7857.         0404h
  7858.         0405h
  7859.         else
  7860.         NOP
  7861. SeeAlso: #02679,#02677
  7862.  
  7863. (Table 02679)
  7864. Call VCOND.VXD protected-mode entry point with:
  7865.     AX = function number
  7866.         0301h
  7867.         0302h
  7868.         0303h
  7869.         0304h
  7870.         0305h
  7871.         0306h
  7872.         0307h
  7873.         0308h
  7874.         else
  7875.         NOP
  7876. SeeAlso: #02678,#02676
  7877. --------W-2F1684BX003B-----------------------
  7878. INT 2F - MS Windows - DSVXD - GET API ENTRY POINT
  7879.     AX = 1684h
  7880.     BX = 003Bh (virtual device ID for DSVXD device) (see #02642)
  7881.     ES:DI = 0000h:0000h
  7882. Return: ES:DI -> VxD API entry point
  7883.           0000h:0000h if the VxD does not support API in current mode
  7884. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7885. --------W-2F1684BX003D-----------------------
  7886. INT 2F - MS Windows - BIOS VxD - GET API ENTRY POINT
  7887.     AX = 1684h
  7888.     BX = 003Dh (virtual device ID for BIOS device) (see #02642)
  7889.     ES:DI = 0000h:0000h
  7890. Return: ES:DI -> VxD API entry point (see #02680)
  7891.           0000h:0000h if the VxD does not support API in current mode
  7892. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7893.  
  7894. (Table 02680)
  7895. Call BIOS.VXD entry point with:
  7896.     AX = function number
  7897.         0000h get BIOS.VXD version
  7898.         Return: CF clear
  7899.             AH = major version
  7900.             AL = minor version
  7901.         0100h ???
  7902.         Return: AX = 0000h
  7903.         Note:    calls CONFIGMG services 804Eh/804Fh
  7904.         0200h ???
  7905.         Return: CF clear if successful
  7906.                 AX = ???
  7907.             CF set on error
  7908.                 AX = error code???
  7909.         Note:    invokes VxDcall 00290002h
  7910.         0300h ???
  7911.         Return: CF clear if successful
  7912.                 AX = ???
  7913.             CF set on error
  7914.                 AX = error code???
  7915.         else
  7916.         Return: CF set
  7917. SeeAlso: #02679,#02681
  7918. --------W-2F1684BX003E-----------------------
  7919. INT 2F - MS Windows - WSOCK - GET API ENTRY POINT
  7920.     AX = 1684h
  7921.     BX = 003Eh (virtual device ID for WSOCK device) (see #02642)
  7922.     ES:DI = 0000h:0000h
  7923. Return: ES:DI -> VxD API entry point
  7924.           0000h:0000h if the VxD does not support API in current mode
  7925. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7926. --------W-2F1684BX011F-----------------------
  7927. INT 2F P - MS Windows - VFLATD - GET API ENTRY POINT
  7928.     AX = 1684h
  7929.     BX = 011Fh (virtual device ID for VFLATD device) (see #02642)
  7930.     ES:DI = 0000h:0000h
  7931. Return: ES:DI -> VxD API entry point (see #02681)
  7932.           0000h:0000h if the VxD does not support API in current mode
  7933. SeeAlso: AX=1684h"DEVICE API",AX=1684/BX=045Dh,INT 20"Windows"
  7934.  
  7935. (Table 02681)
  7936. Call VFLATD.VXD entry point with:
  7937.     DL = function number
  7938.         00h get VFLATD version and ???
  7939.         Return: CF clear
  7940.             EAX = version (AH = major, AL = minor)
  7941.             EBX = ???
  7942.             ECX = ???
  7943.             EDX = ??? or 00000000h
  7944.         01h ???
  7945.         AX = ???
  7946.         CX = ???
  7947.         Return: EAX = ???
  7948.             EDX = ???
  7949.         02h ???
  7950.         ???
  7951.         03h ???
  7952.         EAX = ???
  7953.         EBX = ???
  7954.         ESI = ???
  7955.         CX = ???
  7956.         DH = ???
  7957.         Return: EAX = ???
  7958.             EDX = ???
  7959.             CF clear
  7960.         04h ???
  7961.         DH = ???
  7962.         EAX = ???
  7963.         ECX = ???
  7964.         Return: CF clear
  7965.             EAX = ???
  7966.             EDX = ???
  7967.         05h ???
  7968.         ???
  7969.         Note:    locks some linear memory and calls fn 02h
  7970.         06h ???
  7971.         ???
  7972.         Return: CF clear if successful
  7973.             CF set on error
  7974.         Note:    calls fn 02h and unlocks some linear memory
  7975.         else
  7976.         Return: CF set
  7977. SeeAlso: #02680
  7978. --------W-2F1684BX0200-----------------------
  7979. INT 2F - MS Windows - VIPX - GET API ENTRY POINT
  7980.     AX = 1684h
  7981.     BX = 0200h (virtual device ID for VIPX device) (see #02642)
  7982.     ES:DI = 0000h:0000h
  7983. Return: ES:DI -> VxD API entry point
  7984.           0000h:0000h if the VxD does not support API in current mode
  7985. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7986. --------W-2F1684BX0202-----------------------
  7987. INT 2F - MS Windows - WINICE - GET API ENTRY POINT
  7988.     AX = 1684h
  7989.     BX = 0202h (virtual device ID for WINICE device) (see #02642)
  7990.     ES:DI = 0000h:0000h
  7991. Return: ES:DI -> VxD API entry point
  7992.           0000h:0000h if the VxD does not support API in current mode
  7993. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  7994. --------W-2F1684BX0203-----------------------
  7995. INT 2F P - MS Windows - VCLIENT - GET API ENTRY POINT
  7996.     AX = 1684h
  7997.     BX = 0203h (virtual device ID for VCLIENT device) (see #02642)
  7998.     ES:DI = 0000h:0000h
  7999. Return: ES:DI -> VxD API entry point
  8000.           0000h:0000h if the VxD does not support API in current mode
  8001. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8002. --------W-2F1684BX0205-----------------------
  8003. INT 2F - MS Windows - BCW - GET API ENTRY POINT
  8004.     AX = 1684h
  8005.     BX = 0205h (virtual device ID for BCW device) (see #02642)
  8006.     ES:DI = 0000h:0000h
  8007. Return: ES:DI -> VxD API entry point
  8008.           0000h:0000h if the VxD does not support API in current mode
  8009. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8010. --------W-2F1684BX0207-----------------------
  8011. INT 2F R - MS Windows - DPMS VxD - GET API ENTRY POINT
  8012.     AX = 1684h
  8013.     BX = 0207h (virtual device ID for DPMS device) (see #02642)
  8014.     ES:DI = 0000h:0000h
  8015. Return: ES:DI -> VxD API entry point
  8016.           0000h:0000h if the VxD does not support API in current mode
  8017. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8018. --------W-2F1684BX0234-----------------------
  8019. INT 2F - MS Windows - VCOMMUTE - GET API ENTRY POINT
  8020.     AX = 1684h
  8021.     BX = 0234h (virtual device ID for VCOMMUTE device) (see #02642)
  8022.     ES:DI = 0000h:0000h
  8023. Return: ES:DI -> VxD API entry point
  8024.           0000h:0000h if the VxD does not support API in current mode
  8025. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8026. --------W-2F1684BX0442-----------------------
  8027. INT 2F P - MS Windows - VTDAPI - GET API ENTRY POINT
  8028.     AX = 1684h
  8029.     BX = 0442h (virtual device ID for VTDAPI device) (see #02642)
  8030.     ES:DI = 0000h:0000h
  8031. Return: ES:DI -> VxD API entry point (see #02682)
  8032.           0000h:0000h if the VxD does not support API in current mode
  8033. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8034.  
  8035. (Table 02682)
  8036. Call VTDAPI.VXD entry point with:
  8037.     EAX = function number
  8038.         0000h
  8039.         0001h
  8040.         0002h
  8041.         0003h
  8042.         0004h
  8043.         0005h
  8044.         0006h
  8045.         0007h
  8046.         0008h
  8047.         0009h
  8048.         000Ah
  8049.         000Bh
  8050.         else
  8051.         Return: nothing???
  8052. SeeAlso: #02682
  8053. --------W-2F1684BX0444-----------------------
  8054. INT 2F - MS Windows - VADMAD - GET API ENTRY POINT
  8055.     AX = 1684h
  8056.     BX = 0444h (virtual device ID for VADMAD device) (see #02642)
  8057.     ES:DI = 0000h:0000h
  8058. Return: ES:DI -> VxD API entry point (see #02683)
  8059.           0000h:0000h if the VxD does not support an API
  8060.  
  8061. (Table 02683)
  8062. Call VADMAD entry point with:
  8063.     DX = operation
  8064.         0000h set VADMAD mode
  8065.         AX = desired mode
  8066.         0001h set VADMAD channel
  8067.         AX = desired channel
  8068. Note:    after setting mode/channel, start the DMA operation with an OUT to
  8069.       I/O port 0Bh (channels 0-3) or D6h (channels 4-7)
  8070. SeeAlso: #01268 at INT 20"Windows"
  8071. --------W-2F1684BX0445-----------------------
  8072. INT 2F - MS Windows - VSBD - GET API ENTRY POINT
  8073.     AX = 1684h
  8074.     BX = 0445h (virtual device ID for VSBD device) (see #02642)
  8075.     ES:DI = 0000h:0000h
  8076. Return: ES:DI -> VxD API entry point
  8077.           0000h:0000h if the VxD does not support API in current mode
  8078. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8079. --------W-2F1684BX0446-----------------------
  8080. INT 2F - MS Windows - VADLIBD - GET API ENTRY POINT
  8081.     AX = 1684h
  8082.     BX = 0446h (virtual device ID for VADLIBD device) (see #02642)
  8083.     ES:DI = 0000h:0000h
  8084. Return: ES:DI -> VxD API entry point
  8085.           0000h:0000h if the VxD does not support API in current mode
  8086. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8087. --------W-2F1684BX0449-----------------------
  8088. INT 2F P - MS Windows - vjoyd - GET API ENTRY POINT
  8089.     AX = 1684h
  8090.     BX = 0449h (virtual device ID for "vjoyd" device) (see #02642)
  8091.     ES:DI = 0000h:0000h
  8092. Return: ES:DI -> VxD API entry point (see #02684)
  8093.           0000h:0000h if the VxD does not support API in current mode
  8094. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8095.  
  8096. (Table 02684)
  8097. Call VJOYD.VXD entry point with:
  8098.     AX = function number
  8099.         0000h get VJOYD version
  8100.         Return: AH = major version
  8101.             AL = minor version
  8102.         0001h ???
  8103.         DX = ???
  8104.         Return: DX:AX = ???
  8105.         0002h ???
  8106.         DX = ???
  8107.         Return: DX:AX = ???
  8108.         0003h ???
  8109.         Retrun: AX = 0001h
  8110.         0004h ???
  8111.         DX = ???
  8112.         Return: DX:AX = ???
  8113.         0005h ???
  8114.         Return: ???
  8115.         else
  8116.         Return: EAX = 00000000h
  8117. SeeAlso: #02682,#02685
  8118. --------W-2F1684BX044A-----------------------
  8119. INT 2F - MS Windows - mmdevldr - GET API ENTRY POINT
  8120.     AX = 1684h
  8121.     BX = 044Ah (virtual device ID for "mmdevldr" device) (see #02642)
  8122.     ES:DI = 0000h:0000h
  8123. Return: ES:DI -> VxD API entry point (see #02685)
  8124.           0000h:0000h if the VxD does not support API in current mode
  8125. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8126.  
  8127. (Table 02685)
  8128. Call MMDEVLDR.VXD entry point with:
  8129.     DX = function number
  8130.         0000h ???
  8131.         Return: CF clear if successful
  8132.                 AX = 0000h
  8133.             CF set on error
  8134.                 AX = error code (000Bh)
  8135.         Note:    invokes VxDCall 17000Eh ("CallAtAppyTime")
  8136.         0001h ???
  8137.         Return: CF clear if successful
  8138.                 AX = 0000h
  8139.             CF set on error
  8140.                 AX = error code (000Bh)
  8141.         Note:    invokes VxDCall 17000Eh ("CallAtAppyTime")
  8142.         0002h ???
  8143.         EDX = ???
  8144.         Return: CF clear if successful
  8145.                 AX = 0000h
  8146.                 EDX = ???
  8147.             CF set on error
  8148.                 AX = error code
  8149.         0003h ???
  8150.         Return: CF clear if successful
  8151.                 AX = 0000h
  8152.             CF set on error
  8153.                 AX = error code
  8154.         Note:    invokes VxDcall 2A0002h ("VWIN32_QueueUserApc")
  8155.         0004h set Win32 event
  8156.         Return: CF clear if successful
  8157.                 AX = 0000h
  8158.             CF set on error
  8159.                 AX = error code
  8160.         Note:    invokes VxDcall 2A000Eh ("VWIN32_SetWin32Event")
  8161.         0005h ??? (allocates some memory)
  8162.         Return: CF clear
  8163.             AX = 0000h
  8164.         0006h ??? (frees memory)
  8165.         Return: CF clear if successful
  8166.                 AX = 0000h
  8167.             CF set on error
  8168.                 AX = error code
  8169.         else
  8170.         Return: CF set
  8171.             AX = 000Bh (invalid function)
  8172. SeeAlso: #02684,#02686
  8173. --------W-2F1684BX045D-----------------------
  8174. INT 2F P - MS Windows - VflatD - GET API ENTRY POINT
  8175.     AX = 1684h
  8176.     BX = 045Dh (virtual device ID for VflatD device) (see #02642)
  8177.     ES:DI = 0000h:0000h
  8178. Return: ES:DI -> VxD API entry point
  8179.           0000h:0000h if the VxD does not support API in current mode
  8180. SeeAlso: AX=1684h"DEVICE API",AX=1684h/BX=011Fh,INT 20"Windows"
  8181. --------W-2F1684BX045F-----------------------
  8182. INT 2F - MS Windows - azt16 - GET API ENTRY POINT
  8183.     AX = 1684h
  8184.     BX = 045Fh (virtual device ID for "azt16" device) (see #02642)
  8185.     ES:DI = 0000h:0000h
  8186. Return: ES:DI -> VxD API entry point (see #02686)
  8187.           0000h:0000h if the VxD does not support API in current mode
  8188. SeeAlso: AX=1684h/BX=3110h,AX=1684h"DEVICE API",INT 20"Windows"
  8189.  
  8190. (Table 02686)
  8191. Call azt16.VXD entry point with:
  8192.     DX = function number
  8193.         0000h get azt16 version
  8194.         Return: CF clear
  8195.             AX = version (AH=major, AL=minor)
  8196.         0001h ???
  8197.         AX = subfunction
  8198.             0000h ???
  8199.             Return:
  8200.             0001h ???
  8201.             ECX = ???
  8202.             else error
  8203.         Return: CF clear if successful
  8204.                 ???
  8205.             CF set on error
  8206.                 AX = error code
  8207.         0002h ???
  8208.         AX = ???
  8209.         BX = ???
  8210.         Return: ???
  8211.         0003h ???
  8212.         AX = ???
  8213.         BX = ???
  8214.         Return: ???
  8215.         0004h ???
  8216.         BX = ???
  8217.         CX = ???
  8218.         Return: CF clear if successful
  8219.                  AX = 0001h
  8220.             CF set on error
  8221.                  AX = 0000h
  8222.         0005h ???
  8223.         BX = ???
  8224.         CX = ???
  8225.         Return: CF clear if successful
  8226.                  AX = 0001h
  8227.             CF set on error
  8228.                  AX = 0000h
  8229.         0006h ???
  8230.         BX = ???
  8231.         ECX = ???
  8232.         Return: CF clear if succesful
  8233.                 AX = ???
  8234.             CF set on error
  8235.                 AX = FFFFh
  8236.         0100h get azt16 version
  8237.         Return: CF clear
  8238.             AX = version (AH=major, AL=minor)
  8239.         0101h
  8240.         AX = ???
  8241.         ECX = ???
  8242.         Return: CF clear if successful
  8243.                 AX = 0001h
  8244.             CF set on error
  8245.                 AX = 0000h
  8246.         0102h ???
  8247.         AX = ???
  8248.         Return: CF clear if successful
  8249.             CF set on error
  8250.                 AX = reason??? (0/1/2)
  8251.         0103h ???
  8252.         AX = ???
  8253.         Return: CF clear if successful
  8254.                 AX = 0000h
  8255.             CF set on error
  8256.                 AX = reason??? (1/3)
  8257.         0200h ???
  8258.         EDX = ???
  8259.         ???
  8260.         Return: CF clear if successful
  8261.                 DX:AX = ???
  8262.             CF set on error
  8263.                 DX:AX = 0000h:0000h
  8264.         0201h ???
  8265.         ???
  8266.         Return: CF clear
  8267.             AX= 0000h
  8268.         else
  8269.         Return: CF set
  8270. SeeAlso: #02685,#02705
  8271. --------W-2F1684BX0460-----------------------
  8272. INT 2F P - MS Windows - UNIMODEM - GET API ENTRY POINT
  8273.     AX = 1684h
  8274.     BX = 0460h (virtual device ID for UNIMODEM device) (see #02642)
  8275.     ES:DI = 0000h:0000h
  8276. Return: ES:DI -> VxD API entry point (see #02687)
  8277.           0000h:0000h if the VxD does not support API in current mode
  8278. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8279.  
  8280. (Table 02687)
  8281. Call UNIMODEM.VXD protected-mode entry point with:
  8282.     AX = function number
  8283.         0000h
  8284.         Return: AX = ???
  8285.         0001h
  8286.         Return: AX = ???
  8287.         0002h
  8288.         Return: AX = ???
  8289.         0003h
  8290.         Return: AX = ???
  8291.         0004h
  8292.         Return: AX = ???
  8293.         0005h
  8294.         Return: AX = ???
  8295.         0006h
  8296.         Return: AX = ???
  8297.         0007h
  8298.         Return: AX = ???
  8299.         else
  8300.         Return: AX = 0002h
  8301. SeeAlso: #02686,#02688
  8302. --------W-2F1684BX0480-----------------------
  8303. INT 2F - MS Windows - VNetSup - GET API ENTRY POINT
  8304.     AX = 1684h
  8305.     BX = 0480h (virtual device ID for VNetSup device) (see #02642)
  8306.     ES:DI = 0000h:0000h
  8307. Return: ES:DI -> VxD API entry point (see #02688)
  8308.           0000h:0000h if the VxD does not support API in current mode
  8309. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8310.  
  8311. (Table 02688)
  8312. Call VNetSup.VXD entry point with:
  8313.     AX = function number
  8314.         0000h
  8315.         Return: AX = ???
  8316.         0001h
  8317.         Return: AX = ???
  8318.         0002h
  8319.         Return: AX = ???
  8320.         else
  8321.         Return: CF set
  8322.             AX = 0001h
  8323. SeeAlso: #02687,#02689
  8324. --------W-2F1684BX0482-----------------------
  8325. INT 2F - MS Windows - VBrowse - GET API ENTRY POINT
  8326.     AX = 1684h
  8327.     BX = 0482h (virtual device ID for VBrowse device) (see #02642)
  8328.     ES:DI = 0000h:0000h
  8329. Return: ES:DI -> VxD API entry point
  8330.           0000h:0000h if the VxD does not support API in current mode
  8331. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8332. --------W-2F1684BX0483-----------------------
  8333. INT 2F - MS Windows - VSHARE - GET API ENTRY POINT
  8334.     AX = 1684h
  8335.     BX = 0483h (virtual device ID for VSHARE device) (see #02642)
  8336.     ES:DI = 0000h:0000h
  8337. Return: ES:DI -> VxD API entry point (see #02689)
  8338.           0000h:0000h if the VxD does not support API in current mode
  8339. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8340.  
  8341. (Table 02689)
  8342. Call Windows95 VSHARE.VXD entry point with:
  8343.     AX = function number
  8344.         0000h get VSHARE version
  8345.         Return: AH = major version
  8346.             AL = (BCD?) minor version
  8347.         else
  8348.         NOP
  8349. SeeAlso: #02688
  8350. --------W-2F1684BX0484-----------------------
  8351. INT 2F P - MS Windows - IFSMgr - GET API ENTRY POINT
  8352.     AX = 1684h
  8353.     BX = 0484h (virtual device ID for IFSMgr device) (see #02642)
  8354.     ES:DI = 0000h:0000h
  8355. Return: ES:DI -> VxD API entry point
  8356.           0000h:0000h if the VxD does not support API in current mode
  8357. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8358. --------W-2F1684BX0486-----------------------
  8359. INT 2F - MS Windows - VFAT - GET API ENTRY POINT
  8360.     AX = 1684h
  8361.     BX = 0486h (virtual device ID for VFAT device) (see #02642)
  8362.     ES:DI = 0000h:0000h
  8363. Return: ES:DI -> VxD API entry point
  8364.           0000h:0000h if the VxD does not support API in current mode
  8365. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8366. --------W-2F1684BX0487-----------------------
  8367. INT 2F - MS Windows - NWLINK - GET API ENTRY POINT
  8368.     AX = 1684h
  8369.     BX = 0487h (virtual device ID for NWLINK device) (see #02642)
  8370.     ES:DI = 0000h:0000h
  8371. Return: ES:DI -> VxD API entry point
  8372.           0000h:0000h if the VxD does not support API in current mode
  8373. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8374. --------W-2F1684BX0489-----------------------
  8375. INT 2F R - MS Windows - VIP - GET API ENTRY POINT
  8376.     AX = 1684h
  8377.     BX = 0489h (virtual device ID for VIP device) (see #02642)
  8378.     ES:DI = 0000h:0000h
  8379. Return: ES:DI -> VxD API entry point
  8380.           0000h:0000h if the VxD does not support API in current mode
  8381. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8382. --------W-2F1684BX048A-----------------------
  8383. INT 2F - MS Windows 3.11 - VXDLDR - GET API ENTRY POINT
  8384.     AX = 1684h
  8385.     BX = 048Ah (virtual device ID for VTCP device) (see #02642)
  8386.     ES:DI = 0000h:0000h
  8387. Return: ES:DI -> VxD API entry point
  8388.           0000h:0000h if the VxD does not support API in current mode
  8389. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8390. --------W-2F1684BX048A-----------------------
  8391. INT 2F - MS Windows - VCACHE - GET API ENTRY POINT
  8392.     AX = 1684h
  8393.     BX = 048Ah (virtual device ID for VCACHE device) (see #02642)
  8394.     ES:DI = 0000h:0000h
  8395. Return: ES:DI -> VxD API entry point (see #02691)
  8396.           0000h:0000h if the VxD does not support API in current mode
  8397. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8398.  
  8399. (Table 02690)
  8400. Call Windows95 VCACHE.VXD entry point with:
  8401.     Return:    CF set
  8402. SeeAlso: #02689,#02691
  8403. --------W-2F1684BX048D-----------------------
  8404. INT 2F - MS Windows - RASMAC - GET API ENTRY POINT
  8405.     AX = 1684h
  8406.     BX = 048Dh (virtual device ID for RASMAC device) (see #02642)
  8407.     ES:DI = 0000h:0000h
  8408. Return: ES:DI -> VxD API entry point
  8409.           0000h:0000h if the VxD does not support API in current mode
  8410. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8411. --------W-2F1684BX048E-----------------------
  8412. INT 2F - MS Windows - NWREDIR - GET API ENTRY POINT
  8413.     AX = 1684h
  8414.     BX = 048Eh (virtual device ID for NWREDIR device) (see #02642)
  8415.     ES:DI = 0000h:0000h
  8416. Return: ES:DI -> VxD API entry point (see #02691)
  8417.           0000h:0000h if the VxD does not support API in current mode
  8418. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8419.  
  8420. (Table 02691)
  8421. Call Windows95 NWREDIR.VXD entry point with:
  8422.     Return:    CF set
  8423.         EAX = FFFFFFFFh
  8424. SeeAlso: #02690
  8425. --------W-2F1684BX0494-----------------------
  8426. INT 2F - MS Windows - NSCL - GET API ENTRY POINT
  8427.     AX = 1684h
  8428.     BX = 0494h (virtual device ID for NSCL device) (see #02642)
  8429.     ES:DI = 0000h:0000h
  8430. Return: ES:DI -> VxD API entry point (see #02692,#02693)
  8431.           0000h:0000h if the VxD does not support API in current mode
  8432. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8433.  
  8434. (Table 02692)
  8435. Call Windows95 NSCL.VXD virtual-86 entry point with:
  8436.     AL = function number
  8437.         00h
  8438.         01h
  8439.         02h
  8440.         03h
  8441.         04h
  8442.         05h
  8443.         06h
  8444.         07h
  8445.         08h
  8446.         09h
  8447.         0Ah
  8448.         else
  8449.         Return: AX = FFFFh
  8450. SeeAlso: #02691,#02692
  8451.  
  8452. (Table 02693)
  8453. Call Windows95 NSCL.VXD protected-mode entry point with:
  8454.     AL = function number
  8455.         00h
  8456.         01h
  8457.         02h
  8458.         03h
  8459.         else
  8460.         Return: AX = FFFFh
  8461. SeeAlso: #02692
  8462. --------W-2F1684BX0499-----------------------
  8463. INT 2F - MS Windows - PPPMAC - GET API ENTRY POINT
  8464.     AX = 1684h
  8465.     BX = 0499h (virtual device ID for PPPMAC device) (see #02642)
  8466.     ES:DI = 0000h:0000h
  8467. Return: ES:DI -> VxD API entry point
  8468.           0000h:0000h if the VxD does not support API in current mode
  8469. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8470. --------W-2F1684BX049A-----------------------
  8471. INT 2F - MS Windows - VDHCP - GET API ENTRY POINT
  8472.     AX = 1684h
  8473.     BX = 049Ah (virtual device ID for VDHCP device) (see #02642)
  8474.     ES:DI = 0000h:0000h
  8475. Return: ES:DI -> VxD API entry point
  8476.           0000h:0000h if the VxD does not support API in current mode
  8477. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8478. --------W-2F1684BX049B-----------------------
  8479. INT 2F - MS Windows - VNBT - GET API ENTRY POINT
  8480.     AX = 1684h
  8481.     BX = 049Bh (virtual device ID for VNBT device) (see #02642)
  8482.     ES:DI = 0000h:0000h
  8483. Return: ES:DI -> VxD API entry point
  8484.           0000h:0000h if the VxD does not support API in current mode
  8485. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8486. --------W-2F1684BX1021-----------------------
  8487. INT 2F - MS Windows - VMB - GET API ENTRY POINT
  8488.     AX = 1684h
  8489.     BX = 1021h (virtual device ID for VMB device) (see #02642)
  8490.     ES:DI = 0000h:0000h
  8491. Return: ES:DI -> VxD API entry point
  8492.           0000h:0000h if the VxD does not support API in current mode
  8493. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8494. --------W-2F1684BX28A0-----------------------
  8495. INT 2F - MS Windows - PHARLAPX - GET API ENTRY POINT
  8496.     AX = 1684h
  8497.     BX = 28A0h (virtual device ID for PHARLAPX device) (see #02642)
  8498.     ES:DI = 0000h:0000h
  8499. Return: ES:DI -> VxD API entry point (see #02694)
  8500.           0000h:0000h if the VxD does not support an API
  8501.  
  8502. (Table 02694)
  8503. Call PHARLAPX VxD entry point with:
  8504.     AX = function
  8505.         0001h get PHARLAP.386 version
  8506.         Return: AX = version number (AH = major, AL = minor)
  8507.     ---queue functions---
  8508.         0101h allocate a new message queue
  8509.         CX = size of queue data buffer in bytes
  8510.         Return: DX:AX = handle for new queue, or 0000h:0000h on error
  8511.         0102h allocate a new key queue
  8512.         CX = size of queue data buffer in bytes
  8513.         EDX = VM handle into which keys will be pasted
  8514.         Return: DX:AX = handle for new queue, or 0000h:0000h on error
  8515.         0103h free message queue
  8516.         EDX = queue handle
  8517.         Return: AX = status (0000h,0003h,0007h) (see #02695)
  8518.         0104h free key queue
  8519.         EDX = queue handle
  8520.         Return: AX = status (0000h,0003h,0005h) (see #02695)
  8521.         0105h add message to communications queue
  8522.         EDX = queue handle
  8523.         BX = length of message data in bytes
  8524.         CX = length of message header in bytes
  8525.         ES:(E)SI -> message header
  8526.         GS:(E)DI -> message data
  8527.         Return: AX = status (0000h-0003h,0007h) (see #02695)
  8528.         0106h remove message from queue
  8529.         EDX = queue handle
  8530.         CX = length of buffer in bytes
  8531.         ES:(E)SI -> buffer for message
  8532.         Return: AX = status (0000h,0003h,0006h,0007h,0008h) (see #02695)
  8533.             CX = length of returned message (if AX=0000h or 0008h)
  8534.         0107h flush queue (remove all data)
  8535.         EDX = queue handle
  8536.         Return: AX = status (0000h,0003h) (see #02695)
  8537.         0108h add PasteKey structure(s) to key queue
  8538.         EDX = queue handle
  8539.         CX = number of PasteKey structures in buffer
  8540.         ES:(E)SI -> PasteKey array (see #02696)
  8541.         Return: AX = status (0000h-0003h) (see #02695)
  8542.         0109h register enqueueing callback function
  8543.         EDX = queue handle
  8544.         ECX = function argument
  8545.         ES:(E)SI -> callback function
  8546.         Return: AX = status (0000h,0003h,0009h) (see #02695)
  8547.         010Ah register dequeueing callback function
  8548.         EDX = queue handle
  8549.         ECX = function argument
  8550.         ES:(E)SI -> callback function
  8551.         Return: AX = status (0000h,0003h,0009h) (see #02695)
  8552.         010Bh unregister enqueueing callback function
  8553.         EDX = queue handle
  8554.         Return: AX = status (0000h,0003h,0009h) (see #02695)
  8555.         010Ch unregister dequeueing callback function
  8556.         EDX = queue handle
  8557.         Return: AX = status (0000h,0003h,0009h) (see #02695)
  8558.         010Dh get message queue status
  8559.         EDX = queue handle
  8560.         Return: AX = status (0000h,0003h) (see #02695)
  8561.             CX = number of pending messages
  8562.         010Eh peek at message in queue
  8563.         EDX = queue handle
  8564.         BX = number of message in queue (0000h = first)
  8565.         CX = size of buffer in bytes
  8566.         ES:(E)SI -> buffer for message
  8567.         Return: AX = status (0000h,0003h,0006h,0008h) (see #02695)
  8568.             CX = length of returned message (if AX=0000h or 0008h)
  8569.         010Fh peek at last message in queue
  8570.         EDX = queue handle
  8571.         CX = size of buffer in bytes
  8572.         ES:(E)SI -> buffer for message
  8573.         Return: AX = status (0000h,0003h,0006h,0008h) (see #02695)
  8574.             CX = length of returned message (if AX=0000h or 0008h)
  8575.         0110h replace last message in queue
  8576.         EDX = queue handle
  8577.         CX = length of message header in bytes
  8578.         BX = length of message data in bytes
  8579.         ES:(E)SI -> message header
  8580.         GS:(E)DI -> message data
  8581.         Return: AX = status (0000h,0002h,0003h) (see #02695)
  8582.         0111h set permitted message count for queue
  8583.         EDX = queue handle
  8584.         CX = maximum number of messages to enqueue (FFFFh = unlimited)
  8585.         Return: AX = status (0000h,0003h) (see #02695)
  8586.     ---generalized VxD services---
  8587.         0202h call VxD function
  8588.         ES:(E)BX -> in/out register-set buffer
  8589.         Return: buffer updated
  8590.         0203h map flat
  8591.         ???
  8592.     --system register functions---
  8593.         0301h read system registers into buffer
  8594.         ES:(E)SI -> 512-byte buffer
  8595.         Return: AX = 0000h
  8596.             buffer filled (mostly zeros)
  8597.         0302h copy linear memory into buffer
  8598.         EDX = linear address
  8599.         CX = number of bytes to copy
  8600.         ES:(E)SI -> buffer
  8601.         Return: AX = 0000h
  8602.         0303h copy data into linear memory
  8603.         EDX = linear address
  8604.         CX = number of bytes to copy
  8605.         ES:(E)SI -> buffer
  8606.         Return: AX = 0000h
  8607.         0304h freeze VM
  8608.         ???
  8609.         0305h unfreeze VM
  8610.         ???
  8611.     ---name registration functions---
  8612.         0401h register name
  8613.         EDX = magic number to associate with name
  8614.         ES:(E)SI -> name to register
  8615.         Return: AX = status (0000h,0009h) (see #02695)
  8616.         0402h unregister name
  8617.         ES:(E)SI -> name to be unregistered
  8618.         Return: AX = status (0000h,0009h) (see #02695)
  8619.         0403h look up name
  8620.         ES:(E)SI -> name to look up
  8621.         Return: DX:AX = magic number or 0000h:0000h if not registered
  8622.         0404h get name list handle
  8623.         Return: DX:AX = name list handle
  8624.                 0000h:0000h if not initialized
  8625.     ---special DOS server routines (undocumented)---
  8626.         0501h register
  8627.         0502h unregister
  8628.         0503h validate VM
  8629.         0504h get INT9 count
  8630.         0505h get screen line
  8631.         0506h get shift status
  8632.         0507h get server PB pointer
  8633.         0508h initialize DOS shell
  8634.         0509h get last VM handle
  8635.  
  8636. (Table 02695)
  8637. Values for PHARLAPX function status:
  8638.  00h    successful
  8639.  01h    data is too large to fit in queue
  8640.  02h    queue is full
  8641.  03h    invalid queue handle
  8642.  04h    invalid VM handle for queue
  8643.  05h    error starting a paste operation
  8644.  06h    queue is empty
  8645.  07h    a VM is blocked waiting on the queue
  8646.  08h    message was too long (truncated)
  8647.  09h    unable to register or unregister specified callback
  8648. SeeAlso: #02694
  8649.  
  8650. Format of PHARLAPX PasteKey structure:
  8651. Offset    Size    Description    (Table 02696)
  8652.  00h    BYTE    ASCII code
  8653.  01h    BYTE    scan code (see #00006)
  8654.  02h    WORD    shift states
  8655. SeeAlso: #02694
  8656.  
  8657. Format of PHARLAPX VxD-call register structure:
  8658. Offset    Size    Description    (Table 02697)
  8659.  00h    DWORD    call number
  8660.  04h    WORD    input register map (see #02698)
  8661.  06h    WORD    output register map (see #02698)
  8662.  08h  7 DWORDs    values for EAX, EBX, ECX, EDX, EBP, ESI, EDI on call
  8663.  24h  4    WORDs    values for DS, ES, FG, GS on call
  8664.  2Ch    DWORD    EFLAGS on call
  8665.  30h  7 DWORDs    returned values of EAX, EBX, ECX, EDX, EBP, ESI, EDI
  8666.  4Ch  4 WORDs    returned values of DS, ES, FS, GS
  8667.  54h    DWORD    returned EFLAGS
  8668. SeeAlso: #02694
  8669.  
  8670. Bitfields for PHARLAPX VxD-call register map:
  8671. Bit(s)    Description    (Table 02698)
  8672.  0    value in EAX field is valid
  8673.  1    value in EBX field is valid
  8674.  2    value in ECX field is valid
  8675.  3    value in EDX field is valid
  8676.  4    value in EBP field is valid
  8677.  5    value in ESI field is valid
  8678.  6    value in EDI field is valid
  8679.  7    value in DS field is valid
  8680.  8    value in ES field is valid
  8681.  9    value in FS field is valid
  8682.  10    value in GS field is valid
  8683.  11    value in EFLAGS field is valid
  8684. SeeAlso: #02697
  8685. --------W-2F1684BX28A1-----------------------
  8686. INT 2F - MS Windows - PharLap VxD - GET API ENTRY POINT
  8687.     AX = 1684h
  8688.     BX = 28A1h (virtual device ID for PharLap device) (see #02642)
  8689.     ES:DI = 0000h:0000h
  8690. Return: ES:DI -> VxD API entry point
  8691.           0000h:0000h if the VxD does not support API in current mode
  8692. SeeAlso: AX=1684h"DEVICE API",AX=1684h/BX=28A0h,INT 20"Windows"
  8693. --------W-2F1684BX2925-----------------------
  8694. INT 2F - MS Windows - EDOS - GET API ENTRY POINT
  8695.     AX = 1684h
  8696.     BX = 2925h (virtual device ID for EDOS device) (see #02642)
  8697.     ES:DI = 0000h:0000h
  8698. Return: ES:DI -> VxD API entry point (see #02699)
  8699.           0000h:0000h if the VxD does not support an API
  8700.  
  8701. (Table 02699)
  8702. Call EDOS entry point with:
  8703.     AX = 0000h get EDOS version number
  8704.         Return: AH = major version
  8705.             AL = minor version
  8706.     AX = 0001h display message
  8707.         CX = 0
  8708.         DX:BX -> ASCIZ Message
  8709.     AX = 0002h get EDOS error coded
  8710.         Return: EAX = time in milliseconds that Windows has been running
  8711.     AX = 0003h execute windows program
  8712.         Return: EAX = cumulative amount of time the virtual machine has
  8713.             been active, in milliseconds
  8714.     AX = 0008h get/set priority
  8715.         BX = 0000h??? foreground
  8716.          0001h background
  8717.         DI = 0000h get
  8718.          0001h set
  8719.         DX = priority setting
  8720.         Return: CX = foreground priority
  8721.             DX = background priority
  8722.             BX:AX = flags
  8723.             00000001h exclusive ON
  8724.             00000010h background ON
  8725.             SI = CPU percentage
  8726. --------W-2F1684BX292D-----------------------
  8727. INT 2F - MS Windows - VSBPD - GET API ENTRY POINT
  8728.     AX = 1684h
  8729.     BX = 292Dh (virtual device ID for VSBPD device) (see #02642)
  8730.     ES:DI = 0000h:0000h
  8731. Return: ES:DI -> VxD API entry point
  8732.           0000h:0000h if the VxD does not support API in current mode
  8733. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8734. --------W-2F1684BX295A-----------------------
  8735. INT 2F - MS Windows - GRVSULTR - GET API ENTRY POINT
  8736.     AX = 1684h
  8737.     BX = 295Ah (virtual device ID for GRVSULTR device) (see #02642)
  8738.     ES:DI = 0000h:0000h
  8739. Return: ES:DI -> VxD API entry point
  8740.           0000h:0000h if the VxD does not support API in current mode
  8741. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8742. --------x-2F1684BX304C-----------------------
  8743. INT 2F - Intel Plug-and-Play - CONFIGURATION ACCESS - GET ENTRY POINT
  8744.     AX = 1684h
  8745.     BX = 304Ch (ID for Configuration Access) (see #02642)
  8746.     ES:DI = 0000h:0000h
  8747. Return: ES:DI -> API entry point (see #02700)
  8748.           0000h:0000h if Configuration Access not loaded
  8749. Note:    this API is often provided by a DOS device driver, in which case it
  8750.       is available whether or not MSWindows is running
  8751. Index:    installation check;Plug-and-Play Configuration Access
  8752. SeeAlso: AX=1684h/BX=0034h
  8753.  
  8754. (Table 02700)
  8755. Call Plug-and-Play Configuration Access entry point with:
  8756.     AX = function
  8757.         0000h "CA_GetVersion"
  8758.         Return: AX = BCD version (AH = major, AL = minor)
  8759.         0001h "CA_PCI_Read_Config_Byte" (see also INT 1A/AX=B108h)
  8760.     !!!
  8761.         0002h "CA_PCI_Read_Config_Word" (see also INT 1A/AX=B109h)
  8762.         0003h "CA_PCI_Read_Config_DWord" (see also INT 1A/AX=B10Ah)
  8763.         0004h "CA_PCI_Write_Config_Byte" (see also INT 1A/AX=B10Bh)
  8764.         0005h "CA_PCI_Write_Config_Word" (see also INT 1A/AX=B10Ch)
  8765.         0006h "CA_PCI_Write_Config_DWord" (see also INT 1A/AX=B10Dh)
  8766.         0007h "CA_PCI_Generate_Special_Cycle" (see also INT 1A/AX=B106h)
  8767.         0008h "CA_PCI_Get_Routing_Options" (see also INT 1A/AX=B10Eh)
  8768.         0009h invalid function
  8769.         000Ah invalid function
  8770.         000Bh "CA_PnPISA_Get_Info"
  8771.         000Ch "CA_PnPISA_Read_Config_Byte"
  8772.         000Dh "CA_PnPISA_Write_Config_Byte"
  8773.         000Eh "CA_PnPISA_Get_Resource_Data"
  8774.         000Fh invalid function
  8775.         0010h "CA_EISA_Get_Board_ID"
  8776.         0011h "CA_EISA_Get_Slot_Config"
  8777.         0012h "CA_EISA_Get_SlotFunc_Config"
  8778.         0013h "CA_EISA_Clear_NVRAM_Config"
  8779.         0014h "CA_EISA_Write_Config"
  8780.         0015h invalid function
  8781.         0016h "CA_ESCD_Get_Info"
  8782.         0017h "CA_ESCD_Read_Config"
  8783.         0018h "CA_ESCD_Write_Config"
  8784.         0019h invalid function
  8785.         001Ah "CA_Acfg_PCI_Manage_IRQs"
  8786.         DL = IRQ???
  8787.         ES:DI -> ???
  8788.         Return: AX = status
  8789.         001Bh "CA_Acfg_PCI_Get_Routing_Options"
  8790.         ES:DI -> IRQ routing table header
  8791.               (see #01259 at INT 1A/AX=B406h)
  8792.         Return: AX = status
  8793.         001Ch-001Fh invalid functions
  8794.         0020h "CA_PnPB_Get_Num_Sys_Dev_Nodes"
  8795.         0021h "CA_PnPB_Get_Sys_Dev_Node"
  8796.         0022h "CA_PnPB_Set_Sys_Dev_Node"
  8797.         0023h "CA_PnPB_Get_Stat_Res_Info"
  8798.         0024h "CA_PnPB_Set_Stat_Res_Info"
  8799. Return: AX = FFFFh if unsupported function
  8800. SeeAlso: #02701
  8801. --------W-2F1684BX3099-----------------------
  8802. INT 2F - MS Windows - VVidramD - GET API ENTRY POINT
  8803.     AX = 1684h
  8804.     BX = 3099h (virtual device ID for VVidramD device) (see #02642)
  8805.     ES:DI = 0000h:0000h
  8806. Return: ES:DI -> VxD API entry point (see #02701)
  8807.           0000h:0000h if the VxD does not support API in current mode
  8808. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8809.  
  8810. (Table 02701)
  8811. Call VVidramD (VIDRAM.VXD) virtual-86 entry point with:
  8812.     AX = function number
  8813.         0000h map page???
  8814.         BX = page number???
  8815.         Return: CF clear if successful
  8816.             CF set on error
  8817.         0001h ???
  8818.         Return: CF clear if successful
  8819.             CF set on error
  8820.         else
  8821.         Return: CF set
  8822. SeeAlso: #02700,#02702
  8823. --------W-2F1684BX30F6-----------------------
  8824. INT 2F P - MS Windows - WSVV - GET API ENTRY POINT
  8825.     AX = 1684h
  8826.     BX = 30F6h (virtual device ID for WSVV device) (see #02642)
  8827.     ES:DI = 0000h:0000h
  8828. Return: ES:DI -> VxD API entry point
  8829.           0000h:0000h if the VxD does not support API in current mode
  8830. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8831.  
  8832. (Table 02702)
  8833. Call WSVV.VXD protected-mode entry point with:
  8834.     AX = function number
  8835.         ????
  8836.     Return: ???
  8837. SeeAlso: #02701,#02703
  8838. --------W-2F1684BX310E-----------------------
  8839. INT 2F - MS Windows - WPS - GET API ENTRY POINT
  8840.     AX = 1684h
  8841.     BX = 310Eh (virtual device ID for WPS device) (see #02642)
  8842.     ES:DI = 0000h:0000h
  8843. Return: ES:DI -> VxD API entry point (see #02703)
  8844.           0000h:0000h if the VxD does not support an API
  8845. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8846.  
  8847. (Table 02703)
  8848. Call WPS protected-mode entry point with:
  8849.     DX = function
  8850.         0000h get WPS.386 version
  8851.         Return: CF clear
  8852.             AX = version (AH = major, AL = minor)
  8853.         0001h get number of installed VxDs
  8854.         Return: CF clear
  8855.             AX = number of installed VxDs
  8856.         0002h get VxD characteristics
  8857.         AX = number of VxD
  8858.         ES:BX -> buffer for VxD characteristics structure (see #02704)
  8859.         Return: CF clear
  8860.             ES:BX buffer filled
  8861. SeeAlso: #02702,#02706
  8862.  
  8863. Format of WPS.386 VxD characteristics structure:
  8864. Offset    Size    Description    (Table 02704)
  8865.  00h    WORD    VxD ID number
  8866.  02h    BYTE    VxD minor version
  8867.  03h    BYTE    VxD major version
  8868.  04h    BYTE    DDK minor version
  8869.  05h    BYTE    DDK major version
  8870.  06h    WORD    flags
  8871.         bit 0: V86 API supported
  8872.         bit 1: PM API supported
  8873.         bit 2: services supported
  8874.  08h    DWORD    start order
  8875.  0Ch  9 BYTEs    ASCIZ VxD name
  8876. SeeAlso: #02703
  8877. --------W-2F1684BX3110-----------------------
  8878. INT 2F - MS Windows - VSGLX16.386 - GET API ENTRY POINT
  8879.     AX = 1684h
  8880.     BX = 3110h (virtual device ID for VSGLX16.386) (see #02642)
  8881.     ES:DI = 0000h:0000h
  8882. Return: ES:DI -> VxD API entry point (see #02705)
  8883.           0000h:0000h if the VxD does not support an API
  8884. SeeAlso: AX=1684h/BX=045Fh,AX=1684h"DEVICE API",INT 20"Windows"
  8885.  
  8886. (Table 02705)
  8887. Call VSGLX16.386 entry point with:
  8888.     DX = function number
  8889.         0000h get azt16 version
  8890.         Return: CF clear
  8891.             AX = version returned by "azt16" device
  8892.         0001h get ???
  8893.         AX = ??? (always fails if nonzero)
  8894.         ES:BX -> buffer for ???
  8895.             first DWORD of buffer must be set to length of buffer
  8896.               (in bytes, 1 <= size <= 92) before calling
  8897.         Return: CF clear if successful
  8898.                 AX = 0001h
  8899.             CF set on error (invalid pointer, bad buffer size)
  8900.                 AX = 0000h
  8901.         0002h
  8902.         AX = ???
  8903.         BX = ???
  8904.         Return: CF clear if successful
  8905.                 AX = ???
  8906.             CF set on error
  8907.                 AX = error code
  8908.         0003h
  8909.         AX = ???
  8910.         BX = ???
  8911.         Return: CF clear if successful
  8912.             CF set on error
  8913.         0004h set ???
  8914.         ES:DI -> buffer containing ???
  8915.         BX = ???
  8916.         CX = number of bytes to copy
  8917.         Return: CF clear if successful
  8918.                 AX = 0001h
  8919.             CF set on error
  8920.                 AX = 0000h
  8921.         0005h get ???
  8922.         ES:DI -> buffer for ???
  8923.         BX = ???
  8924.         CX = number of bytes to copy
  8925.         Return: CF clear if successful
  8926.                 AX = 0001h
  8927.             CF set on error
  8928.                 AX = 0000h
  8929.         else
  8930.         Return: CF set
  8931. SeeAlso: #02686
  8932. --------W-2F1684BX31CF-----------------------
  8933. INT 2F - MS Windows - STAT.386 - GET API ENTRY POINT
  8934.     AX = 1684h
  8935.     BX = 31CFh (virtual device ID for STAT.386) (see #02642)
  8936.     ES:DI = 0000h:0000h
  8937. Return: ES:DI -> VxD API entry point (see #02706)
  8938.           0000h:0000h if the VxD does not support an API
  8939. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8940.  
  8941. (Table 02706)
  8942. Call STAT.386 entry point with:
  8943.     AX = function
  8944.         0000h get version
  8945.         Return: AX = STAT.386 version (AH = major, AL = minor)
  8946.         0001h execute RDMSR/WRMSR/RDTSC
  8947.         BH = 00h
  8948.         BL = second opcode byte (30h=WRMSR,31h=RDTSC,32h=RDMSR)
  8949.         EDX:EDI = value to be written (for BL=30h)
  8950.         ECX = MSR number for RDMSR/WRMSR
  8951.         Return: EDX:EAX = value read (RDTSR/RDMSR only)
  8952. SeeAlso: #02703,#02707
  8953. --------W-2F1684BX34DC-----------------------
  8954. INT 2F - QEMM v8.01 - MAGNARAM VxD - GET API ENTRY POINT
  8955.     AX = 1684h
  8956.     BX = 34DCh (virtual device ID for MAGNARAM) (see #02642)
  8957.     ES:DI = 0000h:0000h
  8958. Return: ES:DI -> VxD API entry point (see #02707)
  8959.           0000h:0000h if the VxD does not support an API
  8960. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  8961.  
  8962. (Table 02707)
  8963. Call MAGNARAM MAGNA95.VXD protected-mode entry point with:
  8964.     AX = function number
  8965.         0000h get version and ???
  8966.         Return: AX = version (AH = major, AL = minor)
  8967.             CX = ???
  8968.                 bit 0: ???
  8969.                 bit 1: ???
  8970.         0001h get ???
  8971.         Return: CF clear
  8972.             DX:AX = ??? SHL 2
  8973.         0002h
  8974.         Return: CF clear if successful
  8975.                 AX = ???
  8976.                 DX = ???
  8977.             CF set on error
  8978.         0003h get ???
  8979.         Return: CF clear
  8980.             DX:AX = ??? SHL 2
  8981.         0004h ???
  8982.         Return: CF clear
  8983.             DX:AX = ???
  8984.         0005h ???
  8985.         Return: CF clear
  8986.             DX:AX = ???
  8987.         0006h ???
  8988.         Return: CF clear
  8989.             DX:AX = ???
  8990.         0007h ???
  8991.         Return: CF clear
  8992.             DX:AX = ???
  8993.         0008h ???
  8994.         Return: CF clear
  8995.             DX:AX = ???
  8996.         0009h ???
  8997.         Return: CF clear
  8998.             DX:AX = ???
  8999.         000Ah ???
  9000.         Return: CF clear
  9001.             DX:AX = ???
  9002.         000Bh get ???
  9003.         Return: CF clear
  9004.             DX:AX = ??? SHL 2
  9005.         000Ch get ???
  9006.         Return: CF clear
  9007.             DX:AX = ??? SHL 2
  9008.         000Dh get ???
  9009.         Return: CF clear
  9010.             DX:AX = ??? SHL 2
  9011.         000Eh get ???
  9012.         Return: CF clear
  9013.             AX = ???
  9014.             DX = ???
  9015.         000Fh get ???
  9016.         Return: CF clear
  9017.             DX:AX = ???
  9018.         0010h get ???
  9019.         Return: CF clear
  9020.             DX:AX = ???
  9021.         0011h get ???
  9022.         Return: CF clear
  9023.             DX:AX = ???
  9024.         0012h get ???
  9025.         Return: CF clear
  9026.             DX:AX = ???
  9027.         0013h get ???
  9028.         Return: CF clear
  9029.             DX:AX = ???
  9030.         0014h get ???
  9031.         Return: CF clear
  9032.             DX:AX = ???
  9033.         0015h get ???
  9034.         Return: CF clear
  9035.             DX:AX = ???
  9036.         else
  9037.         Return: CF set
  9038. SeeAlso: #02706,#02708
  9039. --------W-2F1684BX357E-----------------------
  9040. INT 2F - MS Windows - DSOUND - GET API ENTRY POINT
  9041.     AX = 1684h
  9042.     BX = 357Eh (virtual device ID for DSOUND device) (see #02642)
  9043.     ES:DI = 0000h:0000h
  9044. Return: ES:DI -> VxD API entry point
  9045.           0000h:0000h if the VxD does not support API in current mode
  9046. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  9047. ----------2F1684BX377B-----------------------
  9048. INT 2F - MS Windows - MX1501HAD - GET API ENTRY POINT
  9049.     AX = 1684h
  9050.     BX = 377Bh (virtual device ID for MX1501HAD device)
  9051.     ES:DI = 0000h:0000h
  9052. Return: ES:DI -> VxD API entry point (see #02708)
  9053.           0000h:0000h if the VxD does not support an API
  9054. Note:    The drivers VCMD95C.VXD and VCMD.386 are part of the driver disks
  9055.       provided with the chip-card-reader/keyboard combination MX 1501 HAD,
  9056.       produced by Cherry
  9057. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  9058.  
  9059. (Table 02708)
  9060. Call CHERRY VCMD95C.VXD entry point with:
  9061.     AX = function
  9062.         0001h get version
  9063.         Return: AX = version number (0100h) (AH = major, AL = minor)
  9064.         0002h hook INT 09 (and 8???)
  9065.         0003h unhook INT 09 (and 8???)
  9066.         0004h get number of bytes in FIFO
  9067.         Return: AX = bytes in FIFO
  9068.         0005h get next FIFO-data
  9069.         Return: AX = data
  9070.             BL = port number
  9071.             BH = direction (1=in, 0=out)
  9072.             DX:CX = timestamp
  9073.         0006h clear FIFO
  9074.         0007h output byte
  9075.         DX = port number
  9076.         BL = keyboard command
  9077.         Return: data in FIFO (see #02710)
  9078.                (value, port, in/out, timestamp)
  9079.         0008h input byte
  9080.         DX = port number
  9081.         Return: data in FIFO (see #02710)
  9082.             (value, port, in/out, timestamp)
  9083.         0009h input byte immediately
  9084.         DX = port number
  9085.         Return: AX = data
  9086.         000Ah read next FIFO data (nondestructive)
  9087.         Return: AX = data
  9088.             BL = port number
  9089.             BH = direction (1=in, 0=out)
  9090.             DX:CX = timestamp
  9091.         000Bh get timestamp
  9092.         Return: DX:CX = timestamp (in ms)
  9093.         000Ch enable IRQ 1
  9094.         000Dh disable IRQ 1
  9095.         000Eh enable data retrieval
  9096.         Note:    Sets a flag in the internal mode-byte which
  9097.               tells the driver to recognize the data
  9098.         000Fh disable data retrieval
  9099.         Note:    resets a flag in the internal mode-byte
  9100.         0010h get retrieval mode
  9101.         Return: AX = current retrieval mode
  9102.         0011h set retrieval mode
  9103.         BX = new retrieval mode (see #02709)
  9104.         Return: AX = old retrieval mode
  9105.         0012h get command value
  9106.         Return: AX = command value
  9107.         0013h set command value
  9108.         BX = command value
  9109. SeeAlso: #02706,#02711
  9110.  
  9111. Bitfields for retrieval mode:
  9112. Bit(s)    Description    (Table 02709)
  9113.  0    enable data retrieval
  9114.  1    0 = interrupt-driven
  9115.     1 = polling mode
  9116.  2    0 = read port 60h everytime
  9117.     1 = read port 60h only when OBF of port 64h is set
  9118.  3    0 = don't call old INT 9
  9119.     1 = call INT 9 before our INT-handler
  9120.  4-7    reserved
  9121. SeeAlso: #02708,#02710
  9122.  
  9123. Format of FIFO entry (1024 entries in FIFO):
  9124. Offset    Size    Description    (Table 02710)
  9125.  00h    BYTE    data byte
  9126.  01h    BYTE    I/O port
  9127.  02h    BYTE    direction (1=in, 0=out)
  9128.  03h    BYTE    reserved
  9129.  04h    DWORD    timestamp
  9130. SeeAlso: #02708,#02709
  9131. --------W-2F1684BX38DA-----------------------
  9132. INT 2F - MS Windows - VIWD - GET API ENTRY POINT
  9133.     AX = 1684h
  9134.     BX = 38DAh (virtual device ID for VIWD device) (see #02642)
  9135.     ES:DI = 0000h:0000h
  9136. Return: ES:DI -> VxD API entry point (see #02711)
  9137.           0000h:0000h if the VxD does not support API in current mode
  9138. SeeAlso: AX=1684h"DEVICE API",INT 20"Windows"
  9139.  
  9140. (Table 02711)
  9141. Call VIWD.VXD entry point with:
  9142.     DX = function number
  9143.         0000h ???
  9144.         Return: CF clear
  9145.             AX = ???
  9146.         0004h ???
  9147.         Return: CF clear
  9148.             DX = 0000h
  9149.         0006h
  9150.         Return: CF clear
  9151.         000Ah
  9152.         AX = ???
  9153.         Return: CF clear if successful
  9154.             CF set on error
  9155.         000Ch
  9156.         000Dh
  9157.         000Eh
  9158.         Return: CF clear
  9159.         000Fh
  9160.         Return: CF clear
  9161.         0010h
  9162.         0011h
  9163.         0015h
  9164.         Return: CF clear if successful
  9165.                 AX = ???
  9166.             CF set on error
  9167.                 AX = ???
  9168.             DX = 0000h
  9169.         0016h
  9170.         0017h
  9171.         Return: CF clear if successful
  9172.                 AX = ???
  9173.             CF set on error
  9174.                 AX = ???
  9175.             DX = 0000h
  9176.         0018h ???
  9177.         CX = ???
  9178.         Return: CF clear if successful
  9179.                 AX = 0000h
  9180.             CF set on error
  9181.         else
  9182.         Return: CF set
  9183. SeeAlso: #02708,#02712
  9184. --------W-2F1684BX4321-----------------------
  9185. INT 2F - MS Windows - POSTMSG - GET API ENTRY POINT
  9186.     AX = 1684h
  9187.     BX = 4321h (virtual device ID for POSTMSG device) (see #02642)
  9188.     ES:DI = 0000h:0000h
  9189. Return: ES:DI -> VxD API entry point (see #02712,#02714)
  9190.           0000h:0000h if the VxD does not support an API
  9191.  
  9192. (Table 02712)
  9193. Call POSTMSG protected-mode entry point with:
  9194.     AX = window handle
  9195.     CX:BX -> callback procedure (see #02713)
  9196. Return: nothing
  9197. Note:    this call registers a WinApp with the VxD; the callback must be in a
  9198.       fixed, non-discardable code segment
  9199. SeeAlso: #02714,#02715
  9200.  
  9201. (Table 02713)
  9202. Values POSTMSG callback routine is called with:
  9203.     STACK:    DWORD    "lParam" parameter from DOSApp
  9204.         WORD    "wParam" parameter from DOSApp
  9205.         WORD    Windows message number (WM_USER + 100h)
  9206.         WORD    registered HWND
  9207.  
  9208. (Table 02714)
  9209. Call POSTMSG V86-mode entry point with:
  9210.     BX = wParam value to pass to protected-mode callback
  9211.     DX:AX = lParam value to pass to protected-mode callback
  9212. Return: CF clear if successful
  9213.     CF set on error (no WinApp registered)
  9214. SeeAlso: #02712
  9215. --------W-2F1684BX7FE0-----------------------
  9216. INT 2F - MS Windows - VSWITCHD - GET API ENTRY POINT
  9217.     AX = 1684h
  9218.     BX = 7FE0h (virtual device ID for VSWITCHD device) (see #02642)
  9219.     ES:DI = 0000h:0000h
  9220. Return: ES:DI -> VxD API entry point (see #02715)
  9221.           0000h:0000h if the VxD does not support an API
  9222.  
  9223. (Table 02715)
  9224. Call VSWITCHD entry point with:
  9225.     AX = function
  9226.         0000h toggle windowed mode (simulate Alt-Enter keypress)
  9227.         Return: nothing
  9228.         0001h get windowed mode
  9229.         Return: CF clear if VM is windowed
  9230.             CF set if VM is full-screen
  9231. SeeAlso: #02712,#02716
  9232. --------W-2F1684BX8888-----------------------
  9233. INT 2F - MS Windows - VbillD - GET API ENTRY POINT
  9234.     AX = 1684h
  9235.     BX = 8888h (virtual device ID for VbillD device) (see #02642)
  9236.     ES:DI = 0000h:0000h
  9237. Return: ES:DI -> VxD API entry point (see #02716)
  9238.           0000h:0000h if the VxD does not support an API
  9239.  
  9240. (Table 02716)
  9241. Call VbillD entry point with:
  9242.     AX = function
  9243.         0001h set reverse video
  9244.         0002h set normal video
  9245. Return: ???
  9246. SeeAlso: #02715
  9247. --------W-2F1685-----------------------------
  9248. INT 2F - MS Windows - SWITCH VMs AND CALLBACK
  9249.     AX = 1685h
  9250.     BX = VM ID of virtual machine to switch to
  9251.     CX = flags (see #02717)
  9252.     DX:SI = priority boost (refer to VMM.INC)
  9253.     ES:DI -> FAR procedure to callback
  9254. Return: CF set on error
  9255.         AX = error code
  9256.         01h invalid VM ID
  9257.         02h invalid priority boost
  9258.         03h invalid flags
  9259.     CF clear if successful
  9260.         event will be or has been called
  9261. Notes:    some DOS devices, such as networks, need to call functions in a
  9262.       specific VM. This call forces the appropriate VM to be installed.
  9263.     the callback procedure must preserve all registers and return with IRET
  9264. SeeAlso: AX=1683h,INT 15/AX=1117h,AX=DB06h"WINGO"
  9265.  
  9266. Bitfields for VM switching flags:
  9267. Bit(s)    Description    (Table 02717)
  9268.  0    wait until interrupts enabled
  9269.  1    wait until critical section unowned
  9270.  2-15    reserved (zero)
  9271. --------E-2F1686-----------------------------
  9272. INT 2F - DOS Protected-Mode Interface - DETECT MODE
  9273.     AX = 1686h
  9274. Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available)
  9275.     AX nonzero if in real/V86 mode or no DPMI (INT 31 not available)
  9276. SeeAlso: AX=1687h
  9277. --------E-2F1687-----------------------------
  9278. INT 2F - DOS Protected-Mode Interface - INSTALLATION CHECK
  9279.     AX = 1687h
  9280. Return: AX = 0000h if installed
  9281.         BX = flags
  9282.         bit 0: 32-bit programs supported
  9283.         CL = processor type (02h=80286, 03h=80386, 04h=80486)
  9284.         DH = DPMI major version
  9285.         DL = two-digit DPMI minor version (binary)
  9286.         SI = number of paragraphs of DOS extender private data
  9287.         ES:DI -> DPMI mode-switch entry point (see #02718)
  9288.     AX nonzero if not installed
  9289. SeeAlso: AX=1686h,AX=43E0h,AX=DE01h/BX=4450h,AX=FB42h/BX=0001h
  9290. SeeAlso: INT 31/AX=0400h,INT 31/AX=5702h,INT D4/AH=10h
  9291.  
  9292. (Table 02718)
  9293. Call DPMI mode switch entry point with:
  9294.     AX = flags
  9295.         bit 0: set if 32-bit program
  9296.     ES = real mode segment of buffer for DPMI private data (ignored if
  9297.         SI was zero)
  9298. Return: CF set on error
  9299.         program still in real mode
  9300.         AX = error code (DPMI 1.0+)
  9301.            8011h unable to allocate all necessary descriptors
  9302.            8021h 32-bit program specified, but 16-bit DPMI host
  9303.     CF clear if successful
  9304.         CS = 16-bit selector corresponding to real-mode CS
  9305.         SS = selector corresponding to real-mode SS (64K limit)
  9306.         DS = selector corresponding to real-mode DS (64K limit)
  9307.         ES = selector to program's PSP (100h byte limit)
  9308.         FS = GS = 0
  9309.         high word of ESP = 0 if 32-bit program
  9310.         program now in protected mode
  9311. Note:    this entry point is only called for the initial switch to protected
  9312.       mode
  9313. --------W-2F1688BX0BAD-----------------------
  9314. INT 2F U - MS Windows 3.0, 386MAX v6.01 - GET ALIAS SELECTOR TO LDT
  9315.     AX = 1688h
  9316.     BX = 0BADh
  9317. Return: AX = 0000h if supported
  9318.         BX = alias selector for LDT
  9319. Note:    use the LSL instruction or GetSelectorLimit() to find LDT size
  9320.     this call should be considered obsolete for Windows 3.1+, as the
  9321.       alias selector can be retrieved via the API entry point for
  9322.       "MS-DOS" retrieved from INT 2F/AX=168Ah (see #02720)
  9323. SeeAlso: AX=1687h,#02720
  9324. --------W-2F1689-----------------------------
  9325. INT 2F U - MS Windows 3.0+ - KERNEL IDLE CALL
  9326.     AX = 1689h
  9327.     ???
  9328. Return: ???
  9329. Desc:    the Windows KERNEL idle loop calls this function, which VMM uses as an
  9330.       indication that the system is idle, which in turn generates INT 28
  9331.       and INT 2F/AX=1607h/BX=0018h callouts
  9332. SeeAlso: AX=1680h,AX=1607h/BX=0018h,INT 15/AX=1000h,INT 28
  9333. --------E-2F168A-----------------------------
  9334. INT 2F - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT
  9335.     AX = 168Ah
  9336.     DS:(E)SI = selector:offset of ASCIZ vendor name (see #02719)
  9337. Return: AL = status
  9338.         00h successful
  9339.            ES:(E)DI -> extended API entry point
  9340.         8Ah unsuccessful
  9341. Notes:    the vendor name is used to determine which entry point to return; it is
  9342.       case-sensitive
  9343.     available in protected mode only
  9344.     32-bit applications use ESI and EDI, 16-bit applications use SI and DI
  9345.     this call is present but not documented for DPMI 0.9
  9346.     the Borland C++ 3.1 DPMILOAD does not handle requests for entry points
  9347.       other than the MS-DOS one gracefully, producing an unhandled
  9348.       exception report; this has been fixed in the Borland Pascal 7 version
  9349. SeeAlso: AX=1687h,INT 31/AX=0A00h,INT 31/AH=57h
  9350.  
  9351. (Table 02719)
  9352. Values for DPMI vendor-specific API names:
  9353.  "MS-DOS"    MS Windows and 386MAX v6.00+ (see #02720)
  9354.  "386MAX"    386MAX v6.00+
  9355.  "HELIX_DPMI"    Helix Netroom's DPMI server
  9356.  "Phar Lap"    Phar Lap 286|DOS-Extender RUN286 (see #02721)
  9357.  "RATIONAL DOS/4G"  DOS/4G, DOS/4GW
  9358.  "VIRTUAL SUPPORT"  Borland 32RTM
  9359.  
  9360. (Table 02720)
  9361. Call Windows-support ("MS-DOS") entry point with:
  9362.     AX = 0100h get LDT alias selector
  9363. Return: CF clear if successful
  9364.         AX = alias selector
  9365.     CF set on error
  9366. SeeAlso: #02719,AX=1688h/BX=0BADh
  9367.  
  9368. (Table 02721)
  9369. Call Phar Lap RUN286 entry point with:
  9370.     AX = 0000h (function "load MSW")
  9371.     BX = new value for MSW register (low word of CR0)
  9372. Return: ???
  9373. SeeAlso: #02719
  9374. --------W-2F168B-----------------------------
  9375. INT 2F - MS Windows 3.1 - SET FOCUS TO SPECIFIED VIRTUAL MACHINE
  9376.     AX = 168Bh
  9377.     BX = virtual machine ID (see AX=1683h), 0000h for current DOS box
  9378. Return: AL = 00h if focus set to specified VM
  9379. Notes:    documented on the Microsoft Developer's Network CD-ROM
  9380.     if the VM is a windowed DOS box, it will be set to full screen
  9381. SeeAlso: AX=1683h
  9382. --------W-2F168C-----------------------------
  9383. INT 2F - MS Windows 3.1 - RESTART COMMAND
  9384.     AX = 168Ch
  9385.     ???
  9386. Return: ???
  9387. Note:    WIN.COM executes specified application
  9388. --------W-2F168EDX0000-----------------------
  9389. INT 2F - Windows95 - TITLE - SET APPLICATION TITLE
  9390.     AX = 168Eh
  9391.     DX = 0000h
  9392.     ES:DI -> ASCIZ application title (max 79 chars+NUL)
  9393. Return: AX = status
  9394.         0000h failed
  9395.         0001h successful
  9396. Note:    if ES:DI is 0000h:0000h or points at an empty string, the current
  9397.       title is removed
  9398. BUG:    this function can return a successful status even though the title was
  9399.       not changed; reportedly, waiting for two clock ticks after program
  9400.       startup solves this problem
  9401. SeeAlso: AX=168Eh/DX=0001h,AX=168Eh/DX=0002h
  9402. --------W-2F168EDX0001-----------------------
  9403. INT 2F - Windows95 - TITLE - SET VIRTUAL MACHINE TITLE
  9404.     AX = 168Eh
  9405.     DX = 0001h
  9406.     ES:DI -> ASCIZ virtual machine title (max 29 chars+NUL)
  9407. Return: AX = status
  9408.         0000h failed
  9409.         0001h successful
  9410. Notes:    if ES:DI is 0000h:0000h or points at an empty string, the current
  9411.       title is removed
  9412.     the VM title should only be changed on explicit instruction from the
  9413.       user
  9414. BUG:    this function can return a successful status even though the title was
  9415.       not changed; reportedly, waiting for two clock ticks after program
  9416.       startup solves this problem
  9417. SeeAlso: AX=168Eh/DX=0000h,AX=168Eh/DX=0003h
  9418. --------W-2F168EDX0002-----------------------
  9419. INT 2F - Windows95 - TITLE - GET APPLICATION TITLE
  9420.     AX = 168Eh
  9421.     DX = 0002h
  9422.     ES:DI -> buffer for ASCIZ application title
  9423.     CX = size of buffer in bytes
  9424. Return: AX = status
  9425.         0000h failed
  9426.         0001h successful
  9427. Desc:    copy as much of the application's window title as possible to the given
  9428.       buffer, appending a terminating NUL to the buffer
  9429. SeeAlso: AX=168Eh/DX=0000h,AX=168Eh/DX=0003h
  9430. --------W-2F168EDX0003-----------------------
  9431. INT 2F - Windows95 - TITLE - GET VIRTUAL MACHINE TITLE
  9432.     AX = 168Eh
  9433.     DX = 0003h
  9434.     ES:DI -> buffer for ASCIZ virtual-machine title
  9435.     CX = size of buffer in bytes
  9436. Return: AX = status
  9437.         0000h failed
  9438.         0001h successful
  9439. Desc:    copy as much of the virtual machine's title as possible to the given
  9440.       buffer, appending a terminating NUL to the buffer
  9441. SeeAlso: AX=168Eh/DX=0001h,AX=168Eh/DX=0002h
  9442. --------W-2F168FDH00-------------------------
  9443. INT 2F - Windows95 - CLOSE-AWARENESS - ENABLE/DISABLE CLOSE COMMAND
  9444.     AX = 168Fh
  9445.     DH = 00h
  9446.     DL = new state
  9447.         00h disabled
  9448.         01h enabled
  9449. Return: AX = status
  9450.         0000h successful
  9451.         else failed
  9452. Desc:    enable or disable the system menu Close command for an application
  9453. SeeAlso: AX=168Fh/DH=01h,AX=168Fh/DH=02h
  9454. --------W-2F168FDH01-------------------------
  9455. INT 2F - Windows95 - CLOSE-AWARENESS - QUERY CLOSE
  9456.     AX = 168Fh
  9457.     DH = 01h
  9458.     DL = 00h (reserved)
  9459. Return: AX = status
  9460.         0000h Close command selected but not yet acknowledged
  9461.         0001h Close command issued and acknowledged
  9462.         168Fh Close command not selected -- application should continue
  9463. Desc:    determine whether the user has requested that the application be closed
  9464.       by selecting the system menu's Close option
  9465. SeeAlso: AX=168Fh/DH=00h,AX=168Fh/DH=02h
  9466. --------W-2F168FDH02-------------------------
  9467. INT 2F - Windows95 - CLOSE-AWARENESS - ACKNOWLEDGE CLOSE
  9468.     AX = 168Fh
  9469.     DH = 02h
  9470.     DL = 00h (reserved)
  9471. Return: AX = status
  9472.         0000h successful
  9473.         else failed
  9474. Note:    once a Close command has been issued, no further keyboard input is
  9475.       available to the application until it calls this function to
  9476.       acknowledge the Close request
  9477. SeeAlso: AX=168Fh/DH=00h,AX=168Fh/DH=03h
  9478. --------W-2F168FDH03-------------------------
  9479. INT 2F - Windows95 - CLOSE-AWARENESS - CANCEL CLOSE
  9480.     AX = 168Fh
  9481.     DH = 03h
  9482.     DL = 00h (reserved)
  9483. Return: AX = status
  9484.         0000h successful
  9485.         else failed
  9486. Desc:    cancels a close request which has already been acknowledged if the
  9487.       application determines that it will not exit at this time
  9488. SeeAlso: AX=168Fh/DH=00h,AX=168Fh/DH=03h
  9489. --------D-2F1690-----------------------------
  9490. INT 2F U - MS-DOS 7 kernel - GET/SET ???
  9491.     AX = 1690h
  9492.     ES:BX -> ???
  9493. Return: ES:BX -> ??? data (see #02722)
  9494. SeeAlso: AX=1611h,AX=1614h
  9495.  
  9496. Format of MS-DOS 7 kernel ??? data:
  9497. Offset    Size    Description    (Table 02722)
  9498.  00h    DWORD    -> ??? data (appears to list the installed drivers)
  9499.  04h    DWORD    -> ??? (value passed in via ES:BX is stored here)
  9500. --------!---Section--------------------------
  9501.